0. 问题
默认情况下main goroutine是不会等待子goroutine结束的,而main退出,所有子goroutine也会终结。一般使用
var wg sync.WaitGroup
wg.Add(times)
//子goroutine完成时,执行wg.Done()
wg.Wait()
来等待子goroutine结束。当wg.Add(times) 和实际的goroutine个数不等时会报错
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [semacquire]:
sync.runtime_Semacquire(0xc4200120cc)
/usr/lib/golang/src/runtime/sema.go:56 +0x39
sync.(*WaitGroup).Wait(0xc4200120c0)
/usr/lib/golang/src/sync/waitgroup.go:131 +0x72
main.main()
/home/kowalski/test_tls.go:59 +0x9c
exit status 2
1. 解决办法
让Add和Done的个数匹配即可!!!