条件变量

来源:互联网 发布:数据库系统的简易设计 编辑:程序博客网 时间:2024/05/14 12:41


1.互斥锁的存在问题:

互斥锁一个明显的缺点是它只有两种状态:锁定和非锁定。设想一种简单情景:多个线程访问同一个共享资源时,并不知道何时应该使用共享资源,如果在临界区里加入判断语句,或者可以有效,但一来效率不高,二来复杂环境下就难以编写了,这是我们需要一个结构,能在条件成立时触发相应线程,进行变量修改和访问。

2.条件变量:

条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,它常和互斥锁一起使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化。一旦其它的某个线程改变了条件变量,它将通知相应的条件变量唤醒一个或多个正被此条件变量阻塞的线程。这些线程将重新锁定互斥锁并重新测试条件是否满足



条件变量是线程中的东西,就是等待某一条件的发生,和信号一样。

条件变量使我们可以睡眠等待某种条件出现。
条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。
pthread_cond_wait 自动解锁互斥量(如同执行了 pthread_unlock_mutex),并等待条件变量触发。这时线程挂起,不占用 CPU 时间,直到条件变量被触发。在调用 pthread_cond_wait 之前,应用程序必须加锁互斥量。pthread_cond_wait 函数返回前,自动重新对互斥量加锁(如同执行了 pthread_lock_mutex)。
    互斥量的解锁和在条件变量上挂起都是自动进行的。因此,在条件变量被触发前,如果所有的线程都要对互斥量加锁,这种机制可保证在线程加锁互斥量和进入等待条件变量期间,条件变量不被触发。


与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止通常条件变量和互斥锁同时使用。条件变量分为两部分: 条件和变量. 条件本身是由互斥量保护的. 线程在改变条件状态前先要锁住互斥量. 它利用线程间共享的全局变量进行同步的一种机制。


互斥量用于线程的互斥,信号量用于线程的同步。这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别

互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性 。但互斥无法限制访问者对资源的访问顺序,即

访问是无序的。

同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源

 以上区别是主要想记住的


   互斥量是用来防止对不变量的破坏,换句话说,是用来规范线程对共享数据的竞争使用。而条件变量是用来对线程同步,即用来协调各个线程合作完成某个任务。比如:足球场上,两个足球队对一个球的使用叫做竞争,可以使用“马赛回旋”这种“互斥量”对球加锁,防止被抢。而传球这个动作就是使用“条件变量”进行唤醒,它的作用是保证一个球队的各个成员能协作起来将球踢进对方的球门。


  条件变量是与互斥量相关联的一种用于多线程之间关于共享数据状态改变的通信机制。当一个动作需要另外一个动作完成时才能进行,即:当一个线程的行为依赖于另外一个线程对共享数据状态的改变时,这时候就可以使用条件变量。条件变量是与互斥量相关联的一种用于多线程之间关于共享数据状态改变的通信机制。它将解锁和挂起封装成为原子操作。





http://blog.51cto.com/hipercomer/914841点击打开链接


http://blog.chinaunix.net/uid-27164517-id-3282242.html点击打开链接


http://www.360doc.com/content/17/1101/17/8335678_700068188.shtml点击打开链接














阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 强质性脊柱炎 强直行脊椎炎 颈强直 强直收缩 肘关节强直与纤维性僵硬 颈椎强直 完全强直收缩 大脑强直 颈项强直 强直多少年后会瘫痪 上海强直医院 强直脊拄炎能自愈吗 颈强直三个表现 强直自遂 关节强直 强直是什么意思 脊柱强直是什么意思 强直吧 强直脊柱炎早期症状 脊柱强直 什么叫强直 强直的症状 强直型脑瘫 强直遗传吗 强直早期症状 肌强直 强直发作 强直怎么锻炼 肌肉强直 强直晚期 去脑强直 强直脊柱炎症状 强直静止 四肢强直 骨性强直 膝关节强直 强直脊椎炎症状 强直如何锻炼 先天性肌强直症 强直打针 强直炎