循环检查并发程序中的条件

问题描述 投票:0回答:1

我正在读一本关于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 ...

go concurrency goroutine
1个回答
0
投票

[手头没有实际的书,而只是一些看起来似乎没有上下文的代码片段,很难说出作者的具体想法。但是我们可以

© www.soinside.com 2019 - 2024. All rights reserved.