func main() {
var wg sync.WaitGroup
ch := make(chan int,5)
start:= time.Now()
cnt:=0
wg.Add(10000)
for i:=0; i<10000; i++ {
ch <- 1
go func() {
defer wg.Done()
doSomething()
cnt++
<-ch
}()
}
wg.Wait()
fmt.Println(cnt)
end:= time.Now()
fmt.Println("End of program.",end.Sub(start))
}
在这里,我想同时执行程序,并且我还希望最多有5个goroutines。问题是当我打印出“cnt”时,它不会是10000。这意味着我有一些没有被执行的goroutines。如何解决此问题?
现在我正在使用互斥体来解决这个问题,但是这个程序的运行时不会更好,我不明白为什么。
func main() {
var wg sync.WaitGroup
var mutex sync.Mutex
ch := make(chan int,5)
start:= time.Now()
cnt:=0
for i:=0; i<10000; i++ {
wg.Add(1)
ch <- 1
go func() {
defer wg.Done()
defer mutex.Unlock()
mutex.Lock()
doSomething()
cnt++
<-ch
}()
}
wg.Wait()
fmt.Println(cnt)
end:= time.Now()
fmt.Println("End of program.",end.Sub(start))
}
繁华开满天机
相关分类