【操作系统原理-陈渝老师】第十章 信号量与管程

0.总览

1.背景

2.信号量

3.信号量的使用

3.1 信号量的PV操作

3.2 信号量的类型和使用场景

3.3 用二进制信号量实现互斥

3.4 用二进制信号量实现简单同步

初值要设置成0;
比如说有两个线程,线程A和线程B必须要等到线程B执行到某个语义之后才能执行.
如何确保这一点呢?
我们可以使用信号量.
首先我们设置condition这个信号量的初值设置成0;
线程A执行P操作之后变成-1,线程A阻塞,一直到等到线程B在某个特定的地方执行到V操作之后
(确保执行V操作之前的那些操作都执行完毕了)才可能将线程A唤醒.线程A才能继续往下执行.
这样就实现了同步.

3.5 用计数信号量实现较复杂同步

3.5.1 案例的需求与一些前置条件

简单的二进制信号量可能实现不了较复杂的同步需求,于是我们采用条件同步的机制,
这个是用计数信号量来实现这个功能的.
比如说我们现在有buffer,有生产者线程会不停地往buffer里面写东西,同时消费者线程
会从buffer里面去数据,这种情况下消费者和生产者就需要用到同步互斥这两种机制的操
作过程.在这个过程这我们需要知道的前置条件:
(1)buffer是有限的;
(2)生产者往buffer里面写数据的时候,消费者不能够做操作,但是可以有多个生产者都往
   buffer中写数据,这一点和我们说lock的时候是不一样的,刚刚说lock的时候是指允许
   一个生产者向buffer里面写数据,现在我们可以有多个生产者向里面buffer里面写数据,
   同理我们也可以有多个消费者.生产者里有多少个线程取决于我们的信号量的初值.
(3)缓冲区为空,消费者必须等待生产者;
(4)缓冲区满了,生产者必须等待消费者.

老师的PPT中的“任何一个事件只能有一个线程操作缓冲区”不是和单线程一样了吗?
多个生产者是什么意思?多个生产者是多个线程的意思吗?

3.5.2 实现的简单代码

V操作无影响
P操作有影响

 

4.信号量的实现

5.

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值