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会被唤醒并继续执行。