sync.WaitGroup是Barrier的实现吗?

can*_*dry 5 go

一个屏障在同步世界允许线程等待其他线程到达某一点.计数信号量允许n个线程访问共享资源.

因此,a sync.WaitGroup是障碍和计数信号量之间的交叉(但没有任何共享资源的概念).这是一个准确的心智模型吗?

Ste*_*erg 5

很多东西都可以作为障碍.在go,最惯用的障碍是一个渠道.如果你有多个goroutine等待,那么waitgroup可能很有用.

虽然waitgroup可以用作处理线程(goroutines)的障碍,但这并不是它能做的全部.您可以将N个作业发送到M goroutines,然后让waitgroup跟踪作业而不是完成的goroutine.

等待组的目的只是等待您期望发生的事件数.这可能是因为goroutines到达了代码中的某个位置,工作已经完成,或者您只是觉得这样.如果你的心理模型只是一个障碍,它将限制你对它的使用.