Condition Variables 条件变量


pthread_cond_wait(pthread_cond_t *, pthread_mutex *)

等待一个条件变量,并且释放传入的mutex锁

标准的用法就是

pthread_mutex_lock(&mutex);

while(xxx)

pthread_cond_wait(&cond, &mutex);

pthread_mutex_unlock(&mutex);


其中phread_cond_wait可以展开成

pthread_mutex_unlock(mutex);

pthread_cond_just_wait(cond);

pthread_mutex_lock(mutex);

也就是在wait之前放锁,收到信号之后再加锁





上图运行结果为 

Thread1 go ahead!

Thread2 go ahead!

说明signal传给了两个wait




若将pthread_cond_wait后面的unlock去掉,则可以预见的是,尽管signal传递给两个wait,一旦他们被唤醒后,第一个操作就是请求mutex锁,因此只有一个thread可以拿到锁并继续运行,然后退出,另外一个进程即使被唤醒也拿不到锁。

运行结果

Thread1 go ahead!

当然也可能是Thread2 go ahead!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值