P:申请一个资源
V:释放一个资源
struct semaphore
{
int value;//信号量的值,表示可用资源的数目
List_of_precess L;//在此信号量上等待的进程队列的对手指针
}S;
if(S.value>0):可供使用的资源的数目
if(S.value==0):无资源、无进程等待
if(S.value<0):相反数为等待使用资源的进程的数目
在信号量上,可建立如下的P、V操作
void P(S)
{
lock interrupts;//中断
S.value--;
if(S.value<0)
{
add this process to S.L;
block;
}
}
void V(S)
{
S.value++;
if(S.value<=0)
{
remove a process Pi from S.L;
unlock(Pi);
}
}
为了使多个进程互斥地进入各自的同类临界区,可以设置一个互斥信号量,例如mutex,置初始值为1,
并在每一个临界区的前后插入此信号量上的P、V操作,是每个进程有如下结构
void P(int i)
{
while(true)
{
P(mutex);
critical section;
V(mutex);
non-critical section;
}
}
考虑两个进程P1、P2,P1有程序S1,P2有程序S2。要求设计一个同步方案,使得S1在S2完成以后才执行,为此&#
P、V操作
最新推荐文章于 2024-06-11 07:42:04 发布