信号量与PV操作
问题的提出
- TS或swap指令管理临界区,采用忙式轮询,效率低
- 关开中断管理临界区,不便交给用户程序使用
信号量的构思
一种可动态定义的软件资源:信号量
-
核心数据结构:等待进程队列
-
信号量声明:资源报到,建立队列
-
申请资源的原语:若申请不得,调用进程入队等待
-
归还资源的原语:若队列中有等待进程,需释放
-
信号量撤销:资源注销,撤销队列
记录型信号量的定义
记录型信号量:一种带数值的软资源
PV操作解决进程互斥问题框架
semaphore s;
s = 1;
cobegin
process Pi {
···
P(s);
临界区;
V(s);
···
}
coend;
例:PV操作解决机票问题
int A[m];
semaphore s;
s = 1; // 只有相同航班的票数才是相关的临界资源,所以用一个信号量处理全部机票会影响进程并发度
cobegin
Process Pi {
int Xi;
Li:按旅客订票要求找到A[j];
P(s);
Xi = A[j];
if (Xi >= 1) {
Xi = Xi - 1;
A[j] = Xi;
V(s);

本文详细介绍了信号量的概念,包括其构思、记录型信号量的定义,以及如何利用PV操作解决进程互斥和同步问题。通过多个实例,如机票问题、生产者消费者问题、苹果橘子问题等,阐述了PV操作在实际问题中的应用和解决思路。
最低0.47元/天 解锁文章
325

被折叠的 条评论
为什么被折叠?



