哈工大-操作系统L16

进程同步与信号量

一.进程合作

每个进程都有自己的执行方案,自己的一套执行程序,但不是每个进程程序都可以随便执行的,有时候需要停下来等待,需要另外的进程发送一些信号,才能继续执行

二.等待是进程同步的核心

停更加重要,找到停之后思考下一步就可以找到走了,先分析哪里会停,再分析哪里会发信号


消费者C执行第一次循环唤醒了P1,消费者C执行第二次循环counter!=0不会进入休眠,counter减一

这时counter!=BUFFER_SIZE-1,counter==BUFFR_SIZE-2无法唤醒P2

三.信号量

信号量记录更加复杂的信号

(4)C再执行1次循环,发现1个进程等待,再wakeup 1个

(5) C再次执行1次循环,不再 wakeup,因为没有进行在等待,此时再来P3也不会weakup,因为并没有进程在等待

总结:当执行P时sem--, 执行C时sem++,sem<0时P休眠,sem<=0时唤醒P

信号量的当前值说是2,有2个资源可以使用

信号量的当前值说是-2,有2个进程等待资这个资源

V(semaphore s)
{
    s.value++;
    if(s.value<=0){
    wakeup(s.queue);
}
}

empty:空闲缓冲区,full:已经生产的内容个数,mutex:互斥信号量

生产者 Producer P(empty)首先测试 空闲缓冲区是为0,为0表示缓冲区已满,生产者进入休眠,消费者 Consumer V(empty)增加空闲缓冲区,唤醒生产者,消费者 Consumer P(full)测试生产个数是否为0, 为0消费者进入休眠,生产者的V(full)怎加生产个数,唤醒消费者,P(mutex)mutex=1进入休眠mutex=0,不允许其它进程进入共享缓冲区,V(full)进行唤醒允许,mutex=1,允许其它进程进入

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值