Closed ChrisCatCP closed 2 months ago
add 为何要 box->push多次,而在wait里却pop一次?与原实现方式是相反的。
用来唤醒多个等待者,之前的实现方式不支持多等待,并且wait_group无法进行复用,并且还有些其他的问题。。
Go里的WaitGroup不是要等待Add里加的次数吗?比如创建10个协程,Add(10),然后 Wait() 实际上是待这个10个协程都调用了Done后Wait 才返回。
是的,但是他那个支持复用的,并且可以有多个地方wait
如果想要象go里的一样,通过Add(10),然后最后通过一个Wait() 完成等待过程,你的实现似乎无法完成这项功能。
可以啊,我跑过那个sample了
能否添加些注释,把设计思想简单介绍一下?
额,就是copy了下golang的实现😂
中午我加一下注释
已经加上注释了
已经加上注释了
从注释很难理解设计思想呀 :)
已经加上注释了
从注释很难理解设计思想呀 :)
state高低32位记录count和waiter,add增加count,done减少count,count为0会唤醒所有等待的线程或协程,wait会增加waiter的数量并且阻塞等待唤醒,大概就是这么个意思。
已合并,谢谢。
好的😊
重构了wait_group,基本就是参考了golang的实现