Go語言條件變量如何設(shè)置超時(shí)

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

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

package main

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

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

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

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

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

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

在這個(gè)示例中,我們創(chuàng)建了一個(gè)sync.Cond類型的條件變量cond,并模擬了一個(gè)耗時(shí)操作。我們?cè)O(shè)置了1秒的超時(shí)時(shí)間,然后使用WaitTimeout方法等待條件滿足或超時(shí)。如果條件在超時(shí)時(shí)間內(nèi)滿足,WaitTimeout方法將返回nil,否則返回一個(gè)超時(shí)錯(cuò)誤。

0