操作系统 信号量机制

信号量机制
  格式

wait()/P操作

signal()/V操作  
整型 int S = 1;

while(s<=0);

S=S-1;

S=S+1;

可能会忙等

记录型

type struct{

  int value;

  struct process *L;

} S

S.value--;

if(S.value<0)

扫描二维码关注公众号,回复: 12831224 查看本文章

    //将进程挂到信号量的等待队列中

    //并使用block原语进行自我阻塞

    //主动放弃处理机

    block(S.L);

S.valus++;

if(S.value <=0)

    //如果释放资源之后信号量小于等于0

    //即还存在进程等待该资源,则通过wakeup唤醒

    wakeup(S.L);

不会忙等

会主动放弃处理机使用权

         

一个信号量其实代表一种资源,其值代表资源剩余量

P操作:请求资源,请求不到则阻塞

V操作:释放资源,若存在等待该资源的进程则唤醒

使用信号量实现进程互斥

记录性型号量 mutex = 1;

p1(){

    P(mutex);
    //临界区代码
    V(mutex);
}
P2(){

    P(mutex);
    //临界区代码
    V(mutex);
}

 注意!!! 不同资源要设置不同的信号量来表示

P、V操作必须成对表示

使用信号量机制实现进程同步

设置信号量初始值为0

记录型信号量 S = 0;

P1(){
    代码1;
    代码2;
    V(S);
    代码3;
}

P2(){
    P(S);
    代码4;
    代码5;
}

用来确保代码4的执行要在代码2之后

在每个“前操作”后执行V操作,告诉另一个进程可以继续执行了

在每个“后操作”前执行P操作,用于等待另一个进程执行到该执行的操作之后

猜你喜欢

转载自blog.csdn.net/qq_20176001/article/details/100080054