溫馨提示×

Go語言條件變量能處理多線程嗎

小樊
81
2024-11-02 16:47:30
欄目: 編程語言

是的,Go語言的sync.Cond類型可以處理多線程。sync.Cond是一個條件變量,它允許多個goroutine等待某個條件成立。當(dāng)條件滿足時,等待的goroutine會被喚醒。sync.Cond通常與sync.Mutex一起使用,以確保在檢查條件和等待通知時不會發(fā)生競態(tài)條件。

下面是一個簡單的示例,展示了如何使用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)
}

在這個示例中,我們創(chuàng)建了一個sync.Cond實例,它與一個互斥鎖mu關(guān)聯(lián)。然后我們啟動了10個goroutine,每個goroutine都在等待data變量等于其索引值。當(dāng)一個goroutine找到滿足條件的數(shù)據(jù)時,它會打印出相應(yīng)的消息,并將data加1。接著,它會喚醒其他等待的goroutine。最后,主線程等待一段時間,以確保所有g(shù)oroutine都有機(jī)會運行。

0