golang cond唤醒锁

5 篇文章 0 订阅
package main

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



func main() {
    mutex := sync.Mutex{};
    // 创建唤醒锁
    cond := sync.NewCond(&mutex);

    for i := 0; i < 10; i++ {
        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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值