产品入库的PV操作

来源:互联网 发布:c语言非空基本数据类型 编辑:程序博客网 时间:2024/05/29 05:04

在一个仓库中可以存放A和B两种产品,要求:
1)每次只能存入一种–互斥访问
2)A产品数量 - B产品数量 < M
3)B产品数量 - A产品数量 < N

其中,M,N是正整数,使用PV操作描述A和B的入库过程。

semaphore mutex = 1;int countA = 0,countB = 0;PA:while(1){    if(countA - countB  < M - 1 && countB - countA < N)    {        P(mutex);        A产品可以入库;        V(mutex);        countA++;    }}PB:while(1){    if(countA - countB < M && countB - countA < N - 1    )    {        P(mutex);        B产品可以入库;        V(mutex);        countB++;    }}

这种写法最符合思路,也可以再加同步的方式进行:

设置Sa表示A与B的差值,Sb表示B与A的差值。

semaphore mutex = 1;semaphore Sa = M-1, Sb = N - 1;PA:while(1){    P(Sa);    P(mutex);    A产品可以入库;    V(mutex);    V(Sb);}PB:while(1){    P(Sb);    P(mutex);    B产品可以入库;    V(mutex);    V(Sa);}

这种写法更符合PV操作的要求。也更简洁。

以上。

0 0
原创粉丝点击