温馨提示×

Go语言条件变量能用于线程同步吗

小樊
82
2024-11-02 16:44:30
栏目: 编程语言

Go语言的sync.Cond类型是专门用于线程同步的条件变量。它允许一个或多个goroutine等待某个条件成立,同时释放互斥锁(sync.Mutex),让其他goroutine继续执行。当条件满足时,等待的goroutine会被唤醒并重新获取互斥锁。

下面是一个简单的示例,展示了如何使用sync.Cond进行线程同步:

package main

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

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

	for i := 0; i < 10; i++ {
		mu.Lock()
		for data <= 0 {
			cond.Wait()
		}
		data--
		fmt.Printf("Goroutine %d: Data is %d\n", i, data)
		cond.Signal()
		mu.Unlock()
		time.Sleep(1 * time.Second)
	}
}

在这个示例中,我们创建了一个互斥锁mu和一个条件变量cond。我们使用一个循环来模拟10个goroutine,每个goroutine在data大于0时执行。当一个goroutine发现data小于等于0时,它会调用cond.Wait()进入等待状态,并释放互斥锁。当条件满足(即data大于0)时,其他goroutine会被唤醒并继续执行。

0