信号量与进程同步的简单理解

信号量可以用来解决互斥与同步问题,它只能被两个标准的原语,wait(S) 和 signal(S) 来访问,也可以记为“P操作”和“V操作”。
 

P/V操作:

   wait(S){
       while(S<=0);
       S = S - 1;    
   }
   signal(S){
       S = S + 1;
   }
  1. s>=0可以表示可用资源数
  2. s<0时,绝对值表示等待资源的进程个数

互斥信号量的作用:在两次PV操作之间,不允许其他进程使用资源。(类似于锁)

 

读者-写者问题的理解:

Reader i
    begin
    p(rmutex); //开始对READCOUNT操作,加锁
    if readcount = 0 then p(wmutex); //如果没有其他读进程,不允许写进程,写加锁
    readcount:= readcount + 1;
    V(rmutex);//对READCOUNT操作,关锁
    perform read operations;
    p(rmutex);//开始对READCOUNT操作,加锁
    readcount:= readcount - 1;
    if readcount = 0 then V(wmutex);//如果没有其他读进程,不允许写进程,写关锁
    V(rmutex);//对READCOUNT操作,关锁
    end

Writer j
    begin 
    p(wmutex);
    perform write operations;
    V(wmutex);
    end

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值