Go语言使用sync.WaitGroup时发生deadlock可能的原因

185 阅读1分钟

Go语言使用sync.WaitGroup时发生deadlock可能的原因

今天在做A Tour of Go中关于并发编程的练习时,发现使用sync.WaitGroup类型变量作为函数参数时容易出现死锁的问题,查阅资料后发现解决办法为:*sync.WaitGroup类型作为参数

因为若用sync.WaitGroup类型变量作为函数参数,传参时值拷贝,会导致在这个函数中对这个变量进行的.Done()操作时对这个拷贝的WaitGroup做的,而不是原来的WaitGroup,这就会导致原来的WaitGroup一直不被Done,一只Wait在那里产生死锁。

参考:stackoverflow.com/questions/2…