您当前的位置: 首页 >  vr

ZhangJiQun&MXP

暂无认证

  • 1浏览

    0关注

    1187博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

P(pass)V(vrijgeven)操作,信号量:semaphore 互斥量:mutex PV操作是一种实现进程互斥与同步的有效方法。PV操作与信号量的处理相关, 银行排队 举例: 博物馆参

ZhangJiQun&MXP 发布时间:2020-01-12 17:37:33 ,浏览量:1

目录

 

信号量:semaphore

互斥量:mutex

PV操作是一种实现进程互斥与同步的有效方法。PV操作与信号量的处理相关,

银行排队 举例:

博物馆参观问题

理发师问题

PV操作

生产者——消费者问题:v(empty) 什么意思

信号量:semaphore 互斥量:mutex

 

PV操作是一种实现进程互斥与同步的有效方法。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

关注
打赏
1665659684
查看更多评论
立即登录/注册

微信扫码登录

0.0437s