记linux下对条件量的学习(一)

本文介绍了Linux中条件量的概念及其在多线程同步中的重要作用。条件量结合互斥量,实现线程的高效协作,避免繁忙查询。文章详细讲解了`pthread_cond_init`、`pthread_cond_destroy`、`pthread_cond_wait`、`pthread_cond_timedwait`、`pthread_cond_signal`和`pthread_cond_broadcast`等关键函数的用法,并强调了在改变条件状态时需要保护线程队列和临界资源的重要性。
摘要由CSDN通过智能技术生成

信号量,互斥量,条件量是线程间保证线程同步的三种方式,其中信号量和互斥量是通过堵塞的方式来实现资源的竞争,试想一下,如果有多个消费者线程同时在等待一个生产者生产产品时,如果只用到互斥量,那么每个消费者线程在访问产品这个临界资源的时候都需要对互斥量metex进行先上锁,读取并且判断有无产品,再解锁地操作。但这是在浪费时间和资源,而且这种繁忙查询的效率非常低。同样,在每次检查之间让线程短暂地进入睡眠,比如睡眠1s,但是因此线程代码就无法最快作出响应。
这样也就有了条件量的使用,简单来说,使用条件量可以使原本堵塞的线程进入休眠状态,直到条件满足,休眠的线程被signal唤醒,执行操作,这样就不会产生竞争
条件量通常是配合互斥量一起用,其中条件量起到了唤醒线程的作用,而互斥量起到了保护条件的作用,线程在改变条件状态时首先先锁住互斥量,改变条件后,发送信号,再释放互斥量。(如果不使用互斥量,当有多个线程同时调用wait时,“等待线程“队列被多个同时访问,就会导致数据错乱)

相关函数

1. int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);

作用:条件量的初始化
返回值:成功返回,失败返回-1;
形参࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值