侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

使用Goroutine并发打印数字序列

2025-12-11 / 0 评论 / 4 阅读

题目

使用Goroutine并发打印数字序列

信息

  • 类型:问答
  • 难度:⭐

考点

Goroutine创建,并发基础,Channel通信

快速回答

实现要点:

  • 使用go关键字启动Goroutine
  • 通过Channel在主Goroutine和子Goroutine间同步数据
  • 主Goroutine等待子Goroutine完成
## 解析

题目要求

编写Go程序,启动一个Goroutine并发打印数字1-5,主Goroutine打印数字6-10,要求输出顺序为1-10连续排列。

原理说明

Goroutine是Go语言的轻量级线程,由Go运行时管理。Channel是Goroutine间的通信管道,提供同步机制:

  • 无缓冲Channel发送/接收操作会阻塞,直到另一方准备好
  • 通过Channel同步可控制Goroutine执行顺序

代码示例

package main

import "fmt"

func main() {
    // 创建同步Channel
    ch := make(chan bool)

    // 启动Goroutine
    go func() {
        // 打印1-5
        for i := 1; i <= 5; i++ {
            fmt.Println(i)
        }
        // 通知主Goroutine
        ch <- true
    }()

    // 等待子Goroutine完成
    <-ch

    // 打印6-10
    for i := 6; i <= 10; i++ {
        fmt.Println(i)
    }
}

最佳实践

  • 明确同步点:使用Channel明确Goroutine间的依赖关系
  • 资源清理:生产代码中需处理Channel关闭
  • 错误处理:通过select实现超时控制防止死锁

常见错误

  • 缺少同步:未使用Channel导致主Goroutine提前退出
  • 死锁:Channel发送/接收不匹配
  • 数据竞争:共享变量未加锁(本例未涉及)

扩展知识

  • WaitGroupsync.WaitGroup更适合等待多个Goroutine
  • 缓冲Channelmake(chan bool, 1)允许异步通信
  • 并发模式:Worker Pool、Pipeline等高级模式