91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
榆树市| 海丰县| 休宁县| 崇信县| 柏乡县| 寿阳县| 大厂| 喀什市| 双桥区| 牟定县| 安化县| 绥宁县| 喀喇沁旗| 托克逊县| 吉首市| 拜城县| 克什克腾旗| 乌苏市| 凌云县| 秦安县| 通化县| 崇明县| 贺州市| 赤水市| 吉木萨尔县| 富阳市| 吉安县| 高密市| 都匀市| 大新县| 辰溪县| 章丘市| 漳州市| 张家口市| 奉贤区| 霍州市| 崇文区| 织金县| 东海县| 满城县| 柘城县|