进程间通信编程(5) - 信号量_fly__chen的博客-程序员秘密

技术标签: Linux系统编程  

信号量:(Semaphore)进程间通信处理同步互斥的机制。是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。

一、什么是信号量
为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也就是说信号量是用来调协进程对共享资源的访问的。

信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待(即P(信号变量))和发送(即V(信号变量))信息操作。最简单的信号量是只能取0和1的变量,这也是信号量最常见的一种形式,叫做二进制信号量。而可以取多个正整数的信号量被称为通用信号量。这里主要讨论二进制信号量。

二、信号量的工作原理
由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),他们的行为是这样的:
P(sv):如果sv的值大于零,就给它减1;如果它的值为零,就挂起该进程的执行
V(sv):如果有其他进程因等待sv而被挂起,就让它恢复运行,如果没有进程因等待sv而挂起,就给它加1.

举个例子,就是两个进程共享信号量sv,一旦其中一个进程执行了P(sv)操作,它将得到信号量,并可以进入临界区,使sv减1。而第二个进程将被阻止进入临界区,因为当它试图执行P(sv)时,sv为0,它会被挂起以等待第一个进程离开临界区域并执行V(sv)释放信号量,这时第二个进程就可以恢复执行。

三、Linux的信号量机制
Linux提供了一组精心设计的信号量接口来对信号进行操作,它们不只是针对二进制信号量,下面将会对这些函数进行介绍,但请注意,这些函数都是用来对成组的信号量值进行操作的。它们声明在头文件sys/sem.h中。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fly__chen/article/details/52926956

智能推荐

poi根据word模板自定义显示文档内容,修改之后的文档保存到另一份文档中_poi 重新保存word_往事不堪回首..的博客-程序员秘密

public void testReadByDoc() { FileOutputStream outStream = null; String path = jarPathUtil.getUploadResource("text.docx");//获取UploadResource文件夹下面的模板路径 try { XWPFDocument doc = new XWPFDocument(POIXMLDocument.openPackage(path)); .

Zookeeper知识点整理_qianghong000的博客-程序员秘密

## 基础篇-----**1、zookeeper是什么**Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务,它包含一个简单的原语集,应用于分布式应用的协作服务,使得分布式应用可以基于这些接口实现诸如同步、配置维护和分集群或者命名的服务。zookeeper是一个由多个service组成的集群,一个leader,多...

基于大疆RM3508电机的串级PID(角度环+速度环)_角度环pid_不会武功不懂江湖的博客-程序员秘密

1.前言最近参加ROBOCON,我负责编写传球机器人,由于传球机构需要一个电机转固定角度来带动球,所以便用大疆3508电机通过串级PID来实现,不得不说3508电机还是真的强,先看一下效果吧。视频2.配置程序关于3508的配置程序以及一些其他部分在我的另外一篇博客里有详细的介绍,本篇主要是详细讲解3508串级pid(转固定角度)。大疆3508/2006/6020电机使用教程3.角度位置控制3508电机的串级PID控制比起其他直流电机要简单一些,不需要过多的处理编码盘的反馈,只需要读取电调反馈的

antV/[email protected]」世界地图+散点图_ansheng02的博客-程序员秘密

之前更新过@antv/L7->1.3.20版本-》北京地图+散点图,链接可点,源码也放在了公众号里,这一篇@antv/L7->2.2.19版本的源码也会放在公众号里,可在最后提取。以下是正文: 首先,安装antv/L7和antv/L7-maps,本项目用的是高德地图,目前antv/L7支持高德地图和Mapbox地图npm install --save @antv/l7 npm install --save @antv/l7-maps 接下来我会对我写的这两个antv/...

jQuery 15个精彩片段_annan211的博客-程序员秘密

1.预加载图片[code="java"](function($) { var cache = []; // Arguments are image paths relative to the current page. $.preLoadImages = function() { var args_len = arguments.length; for...

Vue中的computed计算属性_你瞅啥???的博客-程序员秘密

文章目录computed与watch的异同不同点相同点示例源码结果分析computed与watch的异同不同点触发条件不同  computed计算属性会依赖于使用它的data属性,只要是依赖的data属性值有变动,则自定义重新调用计算属性执行一次。  watch则是在监控的data属性值发生变动时,其会自动调用watch回调函数。执行速度不同  computed计算属性的值是...

随便推点

logback日志写入kafka遇到的那些坑_weixin_33739541的博客-程序员秘密

这两天在学习storm实时流的时候需要将logback日志写入kafka,这期间遇到了很多坑,这里把遇到的坑和解决的问题记录一下,和大家共勉坑1:引入kafka的依赖和import的包不对由于第一次使用kafka,按照以往的经验,觉得应该是引入clinet的依赖所以就引入了 <dependency> <groupId>org.ap...

51单片机汇编编程--16位拉幕灯_双边拉幕灯控制程序_做而论道_CS的博客-程序员秘密

16位拉幕灯。说明:由P1、P2组成16位拉幕灯,依次由P1.0逐次点亮到P2.7。再由P2.7到P1.0逐次熄灭。如此循环。题目链接:http://zhidao.baidu.com/question/1509966686324214140.html做而论道编程如下:2014-05-07 09:59;试试看:    ORG   0000H    MOV   30H, #0    MOV   31H

javascript head body_js 插入head body_Jmutor的博客-程序员秘密

在HTML body部分中的JavaScripts会在页面加载的时候被执行。在HTML head部分中的JavaScripts会在被调用的时候才执行。

svn错误集结之——SVN远程主机强迫关闭了一个现有的连接_sfSam的博客-程序员秘密

最近eclipse插上真机老是出下面的错误.远程主机强迫关闭了一个现有的连接,Connection attempts...Adb connection Error网上说的adb kill-server 然后再adb start-server 再重启eclipse.貌似很多都是转来转去的.试了几次,发现我问题依旧..咕咕噜了一下,发现用下面文章提到的patch adb的方法可以解...

PDP_pdp_lim=_luasihuerdd的博客-程序员秘密

A Perceptual Distinguishability Predictor For JND-Noise-Contaminated Images摘要:恰察觉失真(JND)模型被广泛用于图像和视频中的感知冗余估计。测量JND模型精度的常用方法是在基于JND模型的图像中注入随机噪声,并检查JND噪声污染的图像在感知上是否可与原始图像区分开。此外,当比较两种不同的JND模型的精度时,在相同的噪声能量水平下产生具有更好质量的JND噪声污染图像的模型是更好的模型。但是在这两种情况下,主观测试都是必要的,这是非

推荐文章

热门文章

相关标签