目录

基本概念

PV操作处理相关问题

正确理解信号量机制


基本概念

信号量机制是一种有效的进程同步和互斥工具。信号量有整形信号量、记录型信号量、二进制信号量等。常用整型信号量实现PV操作。P操作表示申请一个资源,V操作表示释放一个资源。以下内容都指的整型信号量。

信号量是一种特殊的变量,表现形式为一个整形S和一个队列。

信号量根据控制对象的不同可以分为:

(1)公用信号量。用于实现进程间互斥,初值为1或资源数。

(2)私用信号量。用于实现进程间同步,初值为0或某正整数。

信号量取值意义:S≥0时,表示某资源可用数;S<0时,其绝对值表示阻塞队列中等待该资源的进程数。

P操作:S=S-1,若S≥0,进程继续执行;若S<0,进程暂停执行,进入等待队列。即执行P操作时,有可用资源则继续执行,无可用资源则等待。

V操作:S=S+1,若S>0,进程继续执行;若S≤0,唤醒等待队列中的一个进程。即执行V操作时,无等待进程则继续执行,有等待进程则唤醒该进程,然后本进程继续执行。

临界资源:一次仅允许一个进程使用的资源。多个进程必须互斥地对它进行访问。在硬件方面有打印机、传真机等,软件方面有变量、缓冲区等。

临界区:每个进程中访问临界资源的那一段代码。每次只允许一个进程进入临界区,进入后不允许其他进程进入。

PV操作处理相关问题

1.进程的互斥

所谓进程的互斥,指当一个进程(线程)进入临界区使用临界资源时,需要使用临界资源的其他进程(线程)必须等待。退出临界区后,需要使用该临界资源的进程解除阻塞。互斥是进程(线程)之间的间接制约关系。

P(信号量)临界区
V(信号量)

令信号量初值为1,进程进入临界区时执行P操作,信号量变为0,此时临界资源相当于被锁定,其他进程无法访问。然后执行V操作退出临界区,信号量变为1,临界资源得到释放,其他进程可以进行访问。

2.进程的同步

进程同步是指为完成某种任务而建立的两个及两个以上的进程在某些位置上因工作次序的需要而等待、传递信息所产生的直接制约关系,这种制约关系源于他们之间的合作关系(依赖关系)。所以同步是一种更为复杂的互斥。也就是说,进程同步就是进程(线程)的运行必须严格按照某种先后次序来运行,从而完成的特定的任务。

最简单的同步形式:进程A执行到L1时,依赖于进程B执行到L2时产生的数据。当进程A执行到L1时,如果进程B还未产生相应的数据,进程A只好等待进程B,只有进程B执行到L2计算出相应的结果后线程A在接着往下运行。

进程A         进程B
…             …
L1:P(信号量) L2:V(信号量)
…             …

设置信号量初值为0,如果进程A先执行到L1,执行P操作后信号量小于0,A等待,知道B执行到L2执行V操作后信号量为0唤醒A继续执行。如果进程B先执行到L2(信号量+1)则进程A无需等待,直接就可以执行完。这样就实现了通过信号量控制进程的同步。

3.生产者-消费者问题

生产者-消费者问题不仅要解决生产者进程与消费者进程的同步关系(生产者生产了产品,消费者才能取产品;消费者取走了产品,生产者才能继续生产),还要处理缓冲区的互斥关系。

对于单缓冲区的生产者-消费者问题,可设置两个信号量S1、S2。S1初值为1,表示缓冲区空余空间(可存放产品个数),S2初值为0,表示缓冲区产品个数。生产产品需要占用缓冲区空间,消费产品需要缓冲区中的产品。这样就很好理解如下的PV操作了:

P1进程生产一个产品后,需要判断缓冲区是否有空间(对S1执行P操作时S1需要大于等于0),如果有空间,则产品可以放入缓冲区;将产品送缓冲区,缓冲区产品数量增加1,需要对S2执行V操作。P2进程消费产品,先判断缓冲区中是否有产品(对S2执行P操作时,S2需要大于等于0),如果有产品,则可以从缓冲区中取产品;从缓冲区中取一个产品,缓冲区空间增加1,需要对S1执行V操作,然后消费者就可以消费了。

当有多个生产者进程写入缓冲区、多个消费者进程读取缓冲区且每条消息只能读一次时,要考虑进程间的互斥关系,即同时只能有一个生产者向缓冲区写入一条消息,同时只能有一个消费者从缓冲区读取一条消息。互斥控制的要点在于判断出临界区的范围。

正确理解信号量机制

可以从以下几个方面进行理解:

1.信号量与P、V操作是用来解决并发问题的,主要是互斥与同步两个关系。因此遇到问题首先从寻找互斥与同步关系开始。可以套用简单互斥、简单同步、生产者-消费者问题。

2.一般来讲,一个互斥或一个同步关系可以使用一个信号量来解决,要注意隐藏的同步关系。如生产者-消费者问题中,有两个同步关系,一个是判断是否还有足够的空间给生产者存放产品,另一个是判断是否有足够的产品让消费者使用。

3.信号量的初值通常表示资源可用数。而且对于初始为0的信号量,一般会先做V操作。

4.在资源使用之前,将会使用P操作;在资源用完之后,将会使用V操作。在互斥关系中P、V操作是在一个进程中成对出现的;而在同步关系中,则P、V操作一定是在两个进程甚至是多个进程中成对出现的。

信号量机制与PV操作的理解相关推荐

  1. 进程同步之信号量机制(pv操作)及三个经典同步问题

    上篇博客中(进程同步之临界区域问题及Peterson算法),我们对临界区,临界资源,锁机制详细解读了下,留下了一个问题,就是锁机制只能判断临界资源是否被占用,所以他解决了互斥问题,但是他不能确定前面的 ...

  2. 信号量机制(PV操作)

    信号量机制处理互斥关系: PV操作可以有效地实现对临界区的管理 设置一个公共信号量s,同时提供两个基于该信号量上的原语操作:P(s).V(s) 代码实现过程: P(s) //检测锁状态并上锁 {s-- ...

  3. 进程同步之信号量机制(pv操作)

    1.信号量机制 信号量机制即利用pv操作来对信号量进行处理. 什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程.信号量的值与相应资源的使用情况有 ...

  4. java中的pv操作,PV操作简单理解

    进程通常分为就绪.运行和阻塞三个工作状态.三种状态在某些条件下可以转换,三者之间的转换关系如下: 进程三个状态之间的转换就是靠PV操作来控制的.PV操作主要就是P操作.V操作和信号量.其中信号量起到了 ...

  5. java pv操作_理解同步的PV操作

    PV操作是Edsger Dijkstra提出的一种经典的解决同步不同执行线程的问题的方法,这种方法是基于一种叫信号量的特殊变量来实现的. 简单理解为就是通过共享变量+信号量实现的一种同步机制,其应用与 ...

  6. 转发PV操作的理解 ,简单易懂

    原文链接https://blog.csdn.net/liushuijinger/article/details/7586656

  7. PV操作每日一题-吸烟者问题

    吸烟者问题 一.问题描述 二.解答 一个比较经典的同步问题 一.问题描述 三个吸烟者在一个房间内,还有一个香烟供应者.为了制造并抽掉香烟,每个吸烟者需要三样东西:烟草.纸和火柴,供应者有着丰富货物提供 ...

  8. 进程管理之PV操作的个人理解

    在了解PV操作之前,我认为有必要先简单理解进程的状态与其之间的转换. 三态模型(图左)中最基本的三个状态:运行.等待和就绪. 运行:进程正在处理机上运行.对于单处理机系统,处于运行状态的进程只有一个. ...

  9. 多线程信号量PV操作初探

    直接上源码吧: 在主线程中创建一个信号量mutex(注意参数,当前值和最大值都设为1),开启总计PRODUCER_COUNT份producer线程,不停地对该信号量mutex进行PV操作:再开启COM ...

最新文章

  1. php自动轮播图代码,JavaScript如何实现动态轮播图效果?(代码示例)
  2. Spark 学习文章
  3. mysql消重统计_mysql sql查询如何实现发私信用户和其他用户的列表?要求消重所有重复的用户结果 - 贪吃蛇学院-专业IT技术平台...
  4. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十二:串口模块① — 发送
  5. centos7 python3 sqlserver_Centos7.3下SQLServer安装配置方法图文教程
  6. Spring下载地址
  7. imx226_相机选型器
  8. Uva_11427 Expect the Expected
  9. VirtualApp实战之拿到女神朋友圈封面
  10. 光立方程序详解_C ++程序使用宏查找数字的立方
  11. 【算法动画图解-5数学】:(1)辗转相除法
  12. 华为云HCIA含金量,华为HCIA题库
  13. 电力电气自动计算excel表格大全【共46份】
  14. Linux AHCI驱动分析之设备初始化
  15. Android遥控车软件设计,手机APP控制,Wifi遥控小车设计资料分享
  16. PDF裁剪页面及调整页面大小的方法
  17. 针对STM32F4的肉电路问题
  18. 旁注、目录越权、跨库、CDN绕过
  19. 新浪邮箱(@sina.com/@sina.cn):启用IMAP4/SMTP服务+授权码
  20. python3-爬虫-百度新闻结果

热门文章

  1. 2021年T电梯修理答案解析及T电梯修理考试申请表
  2. 北京花香满径计算机技术有限公司,花香满径
  3. 位运算判断一个数是奇数还是偶数
  4. web前端在手机上查看电脑上的项目(电脑请求的数据手机可以同步,可以热更新)
  5. 毛尚爱分享:避免被割韭菜的正确姿势有哪些
  6. 最新的Android版本是什么? 以及如何更新到当前的Android操作系统?
  7. Android操作系统版本代号与对应的targetSdkVersion
  8. 人工智能当道,CRM与AI融合之路还有多远
  9. elsevier投稿的一些事情
  10. 思维之数据分析思维小结