Go語言的sync.Cond
類型是專門用于線程同步的條件變量。它允許一個或多個goroutine等待某個條件成立,同時釋放互斥鎖(sync.Mutex
),讓其他goroutine繼續執行。當條件滿足時,等待的goroutine會被喚醒并重新獲取互斥鎖。
下面是一個簡單的示例,展示了如何使用sync.Cond
進行線程同步:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var mu sync.Mutex
cond := sync.NewCond(&mu)
data := 0
for i := 0; i < 10; i++ {
mu.Lock()
for data <= 0 {
cond.Wait()
}
data--
fmt.Printf("Goroutine %d: Data is %d\n", i, data)
cond.Signal()
mu.Unlock()
time.Sleep(1 * time.Second)
}
}
在這個示例中,我們創建了一個互斥鎖mu
和一個條件變量cond
。我們使用一個循環來模擬10個goroutine,每個goroutine在data
大于0時執行。當一個goroutine發現data
小于等于0時,它會調用cond.Wait()
進入等待狀態,并釋放互斥鎖。當條件滿足(即data
大于0)時,其他goroutine會被喚醒并繼續執行。