发送操作在完全完成之前会被阻塞。接收操作也是如此。

一般情况下,发送操作包括了“复制元素值”和“放置副本到通道内部”这两个步骤。在这两个步骤完全完成之前,发起这个发送操作的那句代码会一直阻塞在那里。也就是说,在它之后的代码不会有执行的机会,直到这句代码的阻塞解除。更细致地说,在通道完成发送操作之后,运行时系统会通知这句代码所在的 goroutine,以使它去争取继续运行代码的机会。另外,接收操作通常包含了“复制通道内的元素值”“放置副本到接收方”“删掉原值”三个步骤。在所有这些步骤完全完成之前,发起该操作的代码也会一直阻塞,直到该代码所在的 goroutine 收到了运行时系统的通知并重新获得运行机会为止。说到这里,你可能已经感觉到,如此阻塞代码其实就是为了实现操作的互斥和元素值的完整。

相关文章:

  • 2021-11-10
  • 2021-09-23
  • 2021-11-03
  • 2021-11-07
  • 2021-09-20
猜你喜欢
  • 2021-08-15
  • 2021-11-27
  • 2021-05-31
  • 2021-08-26
  • 2022-01-12
  • 2021-10-25
  • 2021-11-22
相关资源
相似解决方案