golang吧 关注:6,410贴子:14,625
  • 5回复贴,共1

新手求助,Channel堵塞的问题

只看楼主收藏回复


为什么会出现先输出 In f()的情况。如果先输出了In f(),说明1发送到了c中,c <-2这一步应该会阻塞。
2出现再In f()前面应该是正常的,怎么会出现这种情况?


IP属地:上海1楼2020-01-30 20:56回复

    贴一下原因吧,我没考虑读和输出是两个分离的操作。
    https://stackoverflow.com/questions/59987856/why-doesnt-this-buffered-channel-block-in-my-code


    IP属地:上海2楼2020-01-31 00:08
    收起回复
      2025-06-26 18:35:00
      广告
      没复现你的结果


      IP属地:广东来自Android客户端3楼2020-02-23 10:27
      回复
        你的 c<-1后 通道没有被读取,c的容量只有1这时候通道是满的,所以第二个2无法发送到通道,所以阻塞。


        来自iPhone客户端5楼2020-05-21 20:55
        回复
          楼主整明白了吗 我还是没明白。。
          复现不了你的问题 我的测试结果永远是主线程2先写进channel 并输出:
          2
          In f()
          1
          如果是go协程1先进channel会死锁。我现在纠结的是2个并行的线程 为啥总是2先进去 编译时go能知道1先进去后会触发死锁而做了优化吗?


          IP属地:陕西6楼2020-07-01 16:12
          回复