首页 > 其他 > 详细

同步 互斥体和信号量

时间:2015-05-17 20:07:50      阅读:238      评论:0      收藏:0      [点我收藏+]

1、互斥体和信号量都是为了实现同步,但是二者解决的问题不一样,也就是说应用场景不一样。

2、互斥体通过加锁,对于共享的资源,大家排队,依次去访问,一个一个来。也就是说,任何时刻只有一个线程访问,其他的线程等待。

3、互斥体加锁存在的问题:无法控制线程的访问顺序。考虑两个线程A,B,访问顺序可能是A-B,也可能是B-A,就要看谁先加锁。

4、考虑下面的场景,生产者/消费者模式,假定A是生产者,B是消费者,生产一个,消费一个,循环下去,这样就要求访问顺序必须是A-B-A-B...

5、怎么解决这个问题?

  使用信号量,初始化,信号量的容量是1,可用资源为0。A进行V操作,资源加1,B进行P操作,资源减1。A进行V操作的时候,如果可用资源为1(容量满了),必须等待,直到B消费掉资源。B进行P操作的时候,如果可用资源为0(没有资源可用),必须等待,直到A生产出一个资源。通过这种方式控制线程访问顺序。

6、这里可以看出二者的区别:

  a、互斥体:大家排队,一个一个来。信号量:控制访问顺序,当前线程检查条件,条件不满足,等待其他的线程去操作,使条件满足。

  b、对互斥体加锁,必须是谁加锁谁释放。而对信号量PV操作,是不同线程之间可以进行成对的PV操作。

  c、可以使用信号量的PV操作来模拟互斥体的加锁,信号量容量为1,可用资源为0,每个线程都先V操作,do sth ,再P操作,执行顺序取决于谁先进行了V操作。比如:B先V操作,A的V操作阻塞,必须等待,直到B do sth,然后P操作之后,A的V操作才能继续下去。

同步 互斥体和信号量

原文:http://www.cnblogs.com/nzbbody/p/4510298.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!