首页 > 其他 > 详细

信号量与PV操作

时间:2014-04-15 13:10:20      阅读:561      评论:0      收藏:0      [点我收藏+]

解决进程同步互斥问题的机制。

 

1. 信号量

一种特殊变量,表现形式是一个整数Semaphore和一个队列。

S>=0时,S表示可用资源的数量。

S<0时,已经没有可用资源,S的绝对值表示当前等待该资源的进程数。

2. P操作

S=S-1

使用资源,此时如果S<0,则挂起该进程。

3. V操作

S=S+1

释放资源,此时如果S<0,从阻塞队列里唤醒一个进程。

 

4. 互斥控制

互斥控制为了保护共享资源,不让多个进程同时访问该资源。

这种一次只让一个进程访问的资源称为临界资源,信号量初值设为1。

在互斥关系中,PV操作在一个进程中成对出现。

P(S)

临界区

V(S)

 

5. 同步控制

最简单同步形式是A在B到达L2之前不能超过L1。

设置信号量S初值为0,A到达L1后执行P操作后挂起,直到B到达L2后执行V操作将A唤醒。

在同步操作中,PV操作在两个甚至多个进程中成对出现。

进程A

进程B

L1   P(S)

L2    V(S)

 

6. 生产者消费者问题

也称有限缓冲问题。生产者生成数据项放到缓冲区(Bound为N)中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。

要解决该问题,就必须让生产者在缓冲区满时休眠,等到下次消费者消耗缓冲区中的数据的时候,生产者才能被唤醒,开始往缓冲区添加数据。同样,也可以让消费者在缓冲区空时进入休眠,等到生产者往缓冲区添加数据之后,再唤醒消费者。

信号量

初值

描述

Empty

N

缓冲区空项数

Full

0

缓冲区非空项数

Mutex

1

互斥
 

生产者

消费者

P(Empty)

P(Full)

P(Mutex)

P(Mutex)

缓冲区加数据项

缓冲区加数据项

V(Mutex)

V(Mutex)

V(Full)

V(Empty)

 

7. 作者读者问题

 

8. 哲学家进餐问题

 

 

9. 放取水果问题

 

10. 安全岛问题

 

 

参考资料:

morewindows

维基百科

信号量与PV操作,布布扣,bubuko.com

信号量与PV操作

原文:http://www.cnblogs.com/ad2012/p/3663943.html

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