半开方式首先我们用一个channel变量来控制两个goroutine的交替打印:结果发现打印出了ABBAABBA...的效果。也就是我们控制了开始的次序,但没有控制结束的次序,发生了并发不安全的情况。我们在循环体首尾都使用了阻塞独占模式,两个chan交替释放控制权,达到了安全的协程交互控制。而缓冲模式的第一生产者交给了主协程,两个goroutine结构一样,轮式交换角色。这里假设N=2,chan索引为0,1,当索引1要输出,就阻塞到索引0的chan有数据为止,当自己打印完后往自己的chan中发送一个1,方便给依赖自己的chan 解除阻塞。

Go使用协程交替打印字符

Go使用协程交替打印字符

Go使用协程交替打印字符