P(pass)V(vrijgeven)操作,信号量意义,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操作:由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作如下:P(S)是将信号量S减1,若S>=0则P(S)执行完毕,否则执行P(S)的进程置为阻塞状态,进入等待队列;V(S)是将信号量S加1,若S<=0则释放一个因执行P(S)而等待的进程。 
信号量(semaphore):其数据结构为一个值和一个指针,指针指向等待该信号量的下个进程。S>=0时,S表示可用资源的数量;S<0时,表示没有可用的资源请求者必须等待别的进程释放该类资源。信号量可以解决进程同步(私有信号量)与互斥(公有信号量)。 
临界区(critical section):是指一个访问公共资源的程序片段,而这些公共资源又无法同时被多个进程/线程访问的特性。即进程间的互斥(公有信号量,也称互斥信号量) 
进程的状态:就绪状态(ready):进程已获得除处理器外的所需资源,等待分配处理器资源,只要分配了处理器资源进程就可执行。运行状态(runing):进程占用处理器资源,处于此状态的进程数小于等于处理器数目。阻塞状态(blocked):由于进程等待某种条件,在条件满足之前无继续执行。

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

https://www.jianshu.com/p/eeec6b572146

发布了558 篇原创文章 · 获赞 464 · 访问量 48万+

猜你喜欢

转载自blog.csdn.net/qq_38998213/article/details/103947253