多线程中condition wait

condition_wait是多线程编程中的关键操作,常与互斥锁结合使用,确保线程安全地等待特定条件。它允许线程在资源未满足条件时进入休眠状态,减少锁竞争并优化CPU调度。当条件满足时,通过signal或broadcast唤醒等待的线程,但需注意在获取资源后进行非空检查,避免资源被其他线程修改。在线程池实现中,condition_wait起到通知机制的作用,但需防止信号丢失问题。
摘要由CSDN通过智能技术生成

      一般在多线程编程中都会用到condition_wait,在linux下也就是pthread_cond_wait这个系统调用,大多高性能的多线程程序也离不开这基本的东西。

      在看线程调度代码的时候突然想起这个方法,一直用ace,很操作系统的东西都忘得差不多了。下面一段是一年前对这个系统调用的理解

      “条件变量与互斥量一起使用从可以允许线程以无竞争的方式等待特定的条件发生。为什么必须一起使用呢?1)假如当某个资源满足了一定的条件时它要发送信号告诉需要它的线程,假如现在资源为空,条件不满足,那么线程就要等待,那么在线程条件检查时刻t1,到线程放到表上的时刻t2,在t1到t2这段时间内,可能资源来了,然而CPU调度到另外的工作进程上了,这样条件就不能改变,这样线程就错过了条件变化,虽然等线程放到队列上后,资源变化可以通知线程,但是会有时间延迟。2)传递给pthread_cond_wait(pthread_cont_t *restrict cond, pthread_mutex_t *restrict mutex)中的mutex必须是已经锁住的,如果这个互斥锁不是锁住的,那么假如满足条件,线程一对资源访问的同时线程二也可能访问,就造成了资源的不一致。所以这个过程还是挺复杂的,当需要等待时,把一个资源的互斥量和等待条件一同传给这个wait函数,这个wait函数把线程放到这个条件的等待队列上ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值