溫馨提示×

Go語言條件變量如何設置超時

小樊
109
2024-11-02 16:45:29
欄目: 編程語言

在Go語言中,sync.Cond類型提供了條件變量的功能。要設置超時,你可以使用time.After函數來創建一個定時器,當定時器到期時,sync.CondWait方法將返回一個超時錯誤。下面是一個示例:

package main

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

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

	// 模擬一個耗時操作
	go func() {
		time.Sleep(2 * time.Second)
		mu.Lock()
		fmt.Println("條件滿足,通知等待的goroutine")
		cond.Signal()
		mu.Unlock()
	}()

	// 設置超時時間為1秒
	timeout := time.After(1 * time.Second)

	// 等待條件滿足或超時
	mu.Lock()
	for !cond.WaitTimeout(timeout) {
		fmt.Println("等待條件滿足...")
	}
	mu.Unlock()

	fmt.Println("操作完成")
}

在這個示例中,我們創建了一個sync.Cond類型的條件變量cond,并模擬了一個耗時操作。我們設置了1秒的超時時間,然后使用WaitTimeout方法等待條件滿足或超時。如果條件在超時時間內滿足,WaitTimeout方法將返回nil,否則返回一個超時錯誤。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女