亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

Go語言條件變量如何處理通知

小樊
82
2024-11-02 16:43:31
欄目: 編程語言

在Go語言中,條件變量通常使用sync.Cond類型來實現。sync.Cond是一個條件變量,它允許一組goroutine等待某個條件成立。當條件發生變化時,可以使用Signal()Broadcast()方法來通知等待的goroutine。

下面是一個簡單的示例,展示了如何使用sync.Cond處理通知:

package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	var mu sync.Mutex
	cond := sync.NewCond(&mu)
	data := 0

	// 生產者goroutine
	go func() {
		for i := 0; i < 10; i++ {
			mu.Lock()
			for data <= i {
				cond.Wait() // 等待條件成立
			}
			fmt.Printf("Producer: Data %d is ready\n", i)
			data = i + 1
			cond.Signal() // 通知消費者goroutine
			mu.Unlock()
			time.Sleep(1 * time.Second)
		}
	}()

	// 消費者goroutine
	go func() {
		for i := 0; i < 10; i++ {
			mu.Lock()
			for data > i {
				cond.Wait() // 等待條件成立
			}
			fmt.Printf("Consumer: Data %d is consumed\n", i)
			mu.Unlock()
			time.Sleep(1 * time.Second)
		}
	}()

	time.Sleep(10 * time.Second)
}

在這個示例中,我們創建了一個sync.Cond類型的條件變量cond,以及一個互斥鎖mu。生產者goroutine在數據大于等于某個值時,通過cond.Signal()通知消費者goroutine。消費者goroutine在數據小于某個值時,通過cond.Wait()等待條件成立。當條件成立時,消費者goroutine會被喚醒并處理數據。

注意:在使用cond.Wait()時,需要確保已經持有互斥鎖mu,否則會導致運行時錯誤。在喚醒等待的goroutine之前,也需要釋放互斥鎖,以便其他goroutine可以獲取鎖并執行相應的操作。

0
象山县| 山西省| 滨海县| 凤台县| 佳木斯市| 黑山县| 金堂县| 苍山县| 合水县| 黄浦区| 古丈县| 行唐县| 芜湖市| 砀山县| 光山县| 兴业县| 若尔盖县| 辽阳市| 盱眙县| 瑞昌市| 西乌| 百色市| 南丰县| 张家港市| 大宁县| 庐江县| 景洪市| 忻城县| 洪洞县| 雅安市| 老河口市| 宿迁市| 双鸭山市| 济阳县| 碌曲县| 景德镇市| 苗栗市| 高密市| 金山区| 丰顺县| 陕西省|