package main
import (
"time"
"fmt"
"sync"
)
func main() {
mutex := sync.Mutex{}
// 创建唤醒锁
cond := sync.NewCond(&mutex)
for i := 0
go func (num int, cond *sync.Cond) {
cond.L.Lock()
if num < 3 {
//小于3的休眠,等待唤醒
cond.Wait()
}
fmt.Println("num", num, "time", time.Now().Second())
cond.L.Unlock()
}(i, cond)
}
time.Sleep(time.Second * 1)
cond.L.Lock()
// 唤醒一次
cond.Signal()
cond.L.Unlock()
time.Sleep(time.Second * 1)
cond.L.Lock()
//唤醒剩下的所有
cond.Broadcast()
cond.L.Unlock()
time.Sleep(time.Second * 1)
}
输出
num 5 time 11
num 6 time 11
num 7 time 11
num 8 time 11
num 9 time 11
num 3 time 11
num 4 time 11
num 1 time 12
num 0 time 13
num 2 time 13