巢穴

about:blank

互斥锁与条件变量的语义

互斥锁与条件变量的语义


互斥锁,我要对一块共享数据操作,但是我怕同时你也操作,那就乱套了,所以我要加锁,这个时候我就开始操作这块共享数据,而你进不了临界区,等我操作完了,把锁丢掉,你就可以拿到锁进去操作了

 

条件变量,我要看一块共享数据里某一个条件是否达成,我很关心这个,如果我用互斥锁,不停的进入临界区看条件是否达成,这简直太悲剧了,这样一来,我醒的时候会占CPU资源,但是却干不了什么时,只是频繁的看条件是否达成,而且这对别人来说也是一种损失,我每次加上锁,别人就进不了临界区干不了事了。好吧,轮询总是痛苦的,咱等别人通知吧,于是条件变量出现了,我依旧要拿个锁,进了临界区,看到了共享数据,发现,咦,条件还不到,于是我就调用pthread_cond_wait(),先把锁丢了,好让别人可以去对共享数据做操作,然后呢?然后我就睡了,直到特定的条件发生,别人修改完了共享数据,给我发了个消息,我又重新拿到了锁,继续干俺要干的事情了……

 

posted on 2010-12-16 15:35 Vincent 阅读(830) 评论(0)  编辑 收藏 引用 所属分类: 多线程


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理