目录
信号量:semaphore
互斥量:mutex
PV操作是一种实现进程互斥与同步的有效方法。PV操作与信号量的处理相关,
银行排队 举例:
博物馆参观问题
理发师问题
PV操作
生产者——消费者问题:v(empty) 什么意思
信号量:semaphore 互斥量:mutexPV操作是一种实现进程互斥与同步的有效方法。PV操作与信号量的处理相关,
P操作意味着请求分配一个资源.
V操作意味着释放一个资源
信号量的值只能通过PV操作来改变。
P表示通过的意思,V表示释放的意思。 P、V(或wait()、signal())
PV操作是典型的同步机制之一。用一个信号量与一个消息联系起来
当信号量的值为0时,表示期望的消息尚未产生;
当信号量的值非0时,表示期望的消息已经存在。
用PV操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。
银行排队 举例:某银行提供1个服务窗口和10个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾客,并为其服务
semaphore empty = 10; //空位数初值
semaphore full = 0; //已使用
semaphore mutex = 1; //互斥访问叫号机
semaphore service = 0; //控制服务同步关系
process 顾客i
{
P(empty); //等空位,在营业员那边V,所以是一个同步关系
P(mutex);// 从取号机取号;
V(mutex);//释放取号机
V(full);//营业员那边在P,也是一个同步关系
P(service); //营业员那边在V,同步关系
}
process 营业员
{
while(1)
{
P(full);
V(empty);
V(service);
为顾客服务;
}
}
博物馆参观问题
某博物馆最多可容纳500人同时参观,有一个出入口,该出入口一次仅允许一个人通过。参观者的活动描述如下: cobegin 参观者进程i: { … 进门; … 参观; … 出门; … } coend
Semaphore empty=500; //博物馆可以容纳的最多人数
Semaphore mutex=1; //用于出入口资源的控制
cobegin 参观者进程i:
{
P(empty);
P(mutex); 进门;
V(mutex); 参观;
P(mutex); 出门;
V(mutex);
V(empty);
} coend
理发师问题
有一个理发师,一把理发椅和 N 把供等候理发的顾客坐的椅子。 如果没有顾客,则理发师便在理发师椅子上睡觉; 当一个顾客到来时,必须唤醒理发师进行理发; 如果理发师正在理发时又有顾客来到,则如果有空椅子可坐,他就坐下来等,如果没有空椅子,他就离开。 为理发师和顾客各编一段程序(伪代码)描述他们的行为,要求不能带有竞争条件。
int wait = 0; //顾客等待的数量
semaphore mutex = 1; //互斥访问 wait
semaphore barber = 0; //理发师信号量
semaphore customer = 0; //顾客的信号量
//理发师
void barber() {
while (true) {
P(customer); //等待顾客来理发
P(mutex); //申请互斥访问wait
wait = wait - 1; // 等待人数减少一人
V(mutex);//释放临界资源
V(barber);//让理发师去理发
进行理发;
}
}
//顾客
void customer () {
while (true) {
P(mutex);//申请互斥访问wait
if (wait < 10) { //代表10把椅子没有坐满 还可以坐人
wait = wait + 1 ;
V(mutex);
V(customer );
P(barber);//等待理发师来理发
去理发;
} else {
//人满了 顾客直接离开
V(mutex);
}
}
}
PV操作
PV操作:由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作如下:P(S)是将信号量S减1,若S>=0则P(S)执行完毕,否则执行P(S)的进程置为阻塞状态,进入等待队列;V(S)是将信号量S加1,若S=0时,S表示可用资源的数量;S
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?