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

溫馨提示×

Go語言條件變量如何管理狀態

小樊
82
2024-11-02 16:48:30
欄目: 編程語言

在Go語言中,我們可以使用sync.Cond來實現條件變量的管理。sync.Cond是一個基于sync.Mutex的條件變量,它允許在滿足特定條件時通知等待的goroutine。下面是一個簡單的示例,展示了如何使用sync.Cond來管理狀態:

package main

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

type State struct {
	mu        sync.Mutex
	cond      *sync.Cond
	condition bool
}

func NewState() *State {
	s := &State{
		cond: sync.NewCond(&s.mu),
	}
	return s
}

func (s *State) SetCondition(condition bool) {
	s.mu.Lock()
	defer s.mu.Unlock()
	s.condition = condition
	s.cond.Broadcast() // 通知所有等待的goroutine
}

func (s *State) WaitForCondition() {
	s.mu.Lock()
	defer s.mu.Unlock()

	for !s.condition {
		s.cond.Wait() // 等待條件滿足
	}
}

func main() {
	state := NewState()

	go func() {
		state.WaitForCondition()
		fmt.Println("Condition met!")
	}()

	time.Sleep(2 * time.Second)
	state.SetCondition(true)
}

在這個示例中,我們創建了一個名為State的結構體,它包含一個互斥鎖mu和一個條件變量cond。我們還定義了一個SetCondition方法來設置條件并通知所有等待的goroutine,以及一個WaitForCondition方法來等待條件滿足。

main函數中,我們創建了一個State實例,并啟動一個goroutine來等待條件滿足。然后,我們在主線程中等待2秒后設置條件為true,這將通知等待的goroutine繼續執行。

0
萍乡市| 奉新县| 庐江县| 黎平县| 绥宁县| 仙桃市| 南皮县| 通州区| 乐至县| 靖江市| 民丰县| 黄平县| 偏关县| 揭东县| 保定市| 沈丘县| 理塘县| 吉木萨尔县| 颍上县| 铜陵市| 渑池县| 竹溪县| 防城港市| 安宁市| 剑河县| 绿春县| 绥德县| 白河县| 海南省| 侯马市| 盈江县| 恩平市| 山西省| 榆林市| 洞头县| 绍兴县| 高平市| 安宁市| 乐山市| 密云县| 德庆县|