我正在读一本关于Go并发的书(现在我正在学习),我发现了以下代码:
c := sync.NewCond(&sync.Mutex{})
queue := make([]interface{}, 0, 10)
removeFromQueue := func(delay time.Duration) {
time.Sleep(delay)
c.L.Lock()
queue = queue[1:]
fmt.Println("Removed from queue")
c.L.Unlock() c.Signal()
}
for i := 0; i < 10; i++ {
c.L.Lock()
// Why this loop?
for len(queue) == 2 {
c.Wait()
}
fmt.Println("Adding to queue")
queue = append(queue, struct{}{})
go removeFromQueue(1*time.Second)
c.L.Unlock()
}
问题是我不明白为什么作者引入注释标记的for
循环。据我所知,如果没有它,该程序将是正确的,但作者表示存在循环,因为Cond
仅表示发生了某些事情,但这并不意味着状态已经真正改变。 >
在什么情况下有可能?
[我正在读一本关于Go并发的书(现在正在学习),我发现了以下代码:c:= sync.NewCond(&sync.Mutex {})queue:= make([] interface {}, 0,10)removeFromQueue:= func(delay ...
[手头没有实际的书,而只是一些看起来似乎没有上下文的代码片段,很难说出作者的具体想法。但是我们可以