目录

基本概念

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. jpg怎么合成一份_哪些超实用的有机化学知识点---之有机合成工具包
  2. 计算机网络谢希仁第七版课后答案完整版第四章 网络层
  3. Android的组件化和模块化
  4. java 监听桌面鼠标事件,鼠标事件的监听和使用
  5. 【Selenium】之谷歌、IE、火狐浏览器各个版本的浏览器驱动下载地址
  6. poj_3628 动态规划
  7. python提高——进程、线程、协程对比及代码实现
  8. Android Studio builde.gradle 配置说明
  9. 写一个模拟彩票中奖的程序及彩票分析
  10. sem一家之言_白杨SEO:推荐六本好书给你!包含SEO、SEM、推广、运营等
  11. 浅析百度搜索引擎白皮书
  12. android 游戏 柄,Android手柄游戏中心-葡萄游戏厅
  13. MATLAB之黄金分割法求极值
  14. explain mysql语句_使用 explain 查看 MySQL 中 SQL 语句的执行情况 - 文章
  15. 苹果手机换android,我从苹果手机换回了安卓手机,是怎样的体验呢?
  16. ESP8266+Flash基本操作
  17. https://gns3.com/community/discussion/gns3-doesn-t-work-on-vmware-play
  18. 本地机器 Google Colab 通过 SSH 连接远程服务器
  19. 英雄联盟MSI季中赛第四局,UZI卡莎再次天秀,RNG3:1夺冠
  20. 你知道OSPF多区域配置和区域优化吗?(华为OSPF多区域理论,路由重分发,末梢区域和完全末梢区域的优化,NSSA区域的优化)

热门文章

  1. element 多层导航菜单,让网页设计更简洁、美观
  2. 下载的主题文件epf格式的,如何导入到eclipse中。
  3. 广告点击率的贝叶斯平滑
  4. 计算机未能找到网络,无线适配器未找到,未找到网络适配器
  5. Graph500教程
  6. 国家统计局真的使1月份CPI指数同比涨不超过5%
  7. 元宇宙概念火热,哪些“元技能”人才炙手可热?
  8. 33题实战“泰坦尼克号生存预测”全流程
  9. 用Wcat隐藏你的程序窗口
  10. HP Proliant GEN8无法启动磁盘问题