是的,Go語言的sync.Cond
類型可以處理多線程。sync.Cond
是一個條件變量,它允許多個goroutine等待某個條件成立。當條件滿足時,等待的goroutine會被喚醒。sync.Cond
通常與sync.Mutex
一起使用,以確保在檢查條件和等待通知時不會發生競態條件。
下面是一個簡單的示例,展示了如何使用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++ {
go func(i int) {
mu.Lock()
for data != i {
cond.Wait()
}
fmt.Printf("Goroutine %d: Data is %d\n", i, data)
data++
cond.Signal()
mu.Unlock()
}(i)
}
time.Sleep(2 * time.Second)
}
在這個示例中,我們創建了一個sync.Cond
實例,它與一個互斥鎖mu
關聯。然后我們啟動了10個goroutine,每個goroutine都在等待data
變量等于其索引值。當一個goroutine找到滿足條件的數據時,它會打印出相應的消息,并將data
加1。接著,它會喚醒其他等待的goroutine。最后,主線程等待一段時間,以確保所有goroutine都有機會運行。