同步世界中的Barrier允许线程等待其他线程到达某个点。计数信号量允许n个线程访问共享资源。
因此,sync.WaitGroup
是障碍与障碍之间的交叉。计算信号量(但没有任何共享资源的概念)。这是一个准确的心理模型吗?
答案 0 :(得分:5)
很多东西都可以作为障碍。在go,最惯用的障碍是一个渠道。如果你有一个以上的goroutine等待,那么一个waitgroup可能会很有用。
虽然waitgroup可以用作处理线程(goroutines)的屏障,但这并不是它能做的全部。您可以将N个作业发送到M goroutines,然后让waitgroup跟踪作业而不是完成的goroutine。
等待组的目的只是等待您期望发生的事件数。这可能是因为goroutines到达了代码中的某个位置,工作已经完成,或者您只是觉得这样。如果你的心智模型只是一个障碍,它将限制你对它的使用。