在 Go 中,使用两个协程(goroutine)交替打印 123456 的核心在于同步机制和流程控制。我们可以借助 channel 来实现两个 goroutine 之间的协作,确保它们按顺序交替打印。
✅ 实现目标
- 使用两个 goroutine 交替打印数字 1 到 6;
- 输出顺序为:1 → 2 → 3 → 4 → 5 → 6;
- 每个 goroutine 负责打印一半的数字(比如,一个打印奇数,一个打印偶数);
- 打印结束后程序应正确退出。
🛠 实现思路
- 共享计数器:使用
atomic包管理一个共享的计数器变量,确保并发读写安全。 - 通道通信:使用两个无缓冲的 channel(
aChan和bChan)作为“令牌”,控制 goroutine 的执行顺序。 - 流程控制:
- 每个 goroutine 在接收到 channel 信号后打印当前数字;
- 打印完成后,将“令牌”传递给另一个 goroutine;
- 当数字达到 6 时,两个 channel 被关闭,goroutine 退出循环;
- 主函数通过
WaitGroup等待两个 goroutine 完成。
🧩 示例代码
package main
import (
"fmt"
"sync/atomic"
)
func main() {
var counter int32 = 1
aChan := make(chan bool)
bChan

最低0.47元/天 解锁文章
547

被折叠的 条评论
为什么被折叠?



