linux信号量简介
一、什么是信号量
为了防止多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种访问机制,它可以通过生成并使用令牌来授权,在同一时刻只能有一个线程访问代码的临界区域。
临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也就是说信号量是用来协调进程(线程)对共享资源的访问的。
信号量是一个特殊的变量,其数值可用于表示空闲临界资源的数量。有进程释放时,信号量增加,表示可用资源增加;当有进程申请到资源时信号量减少,表示可用资源数减少。程序对其访问都是原子操作,且只允许对它进行等待(即P(信号变量))和发送(即V(信号变量))信息操作。
最简单的信号量是只能取0和1的变量,这也是信号量最常见的一种形式,叫做二元信号量。而可以取多个正整数的信号量被称为通用信号量。这里主要讨论二元信号量。
信号量的值为正的时候,说明它空闲。所测试的线程可以锁定并使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。
二、信号量的工作原理
由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),他们的行为是这样的:
P(sv):如果sv的值大于零,就给它减1;如果它的值为零,就挂起该进程。
V(sv):如果有其他进程因等待sv而被挂起,就让它恢复运行,如果没有进程因等待sv而挂起,就给它加1.
举个例子,就是两个进程共享信号量sv,一旦其中一个进程执行了P(sv)操作,它将得到信号量,并可以进入临界区,使sv减1。而第二个进程将被阻止进入临界区,因为当它试图执行P(sv)时,sv为0,它会被挂起以等待第一个进程离开临界区域并执行V(sv)释放信号量,这时第二个进程就可以恢复执行
举个例子,就是两个进程共享信号量sv,一旦其中一个进程执行了P(sv)操作,它将得到信号量,并可以进入临界区,使sv减1。而第二个进程将被阻止进入临界区,因为当它试图执行P(sv)时,sv为0,它会被挂起以等待第一个进程离开临界区域并执行V(sv)释放信号量,这时第二个进程就可以恢复执行。
三、信号量的分类
Linux中提供了两种信号量,一种用于内核程序中,一种用于应用程序中。
linux信号量简介相关推荐
- Linux进程间通信五 Posix 信号量简介与示例
1. 信号量简介 信号量用于进程或线程间同步,Posix信号量是一个非负整型,只有两种操作,加一(sem_post)和减一(sem_wait),如果信号量值为0,sem_wait默认阻塞. Posix ...
- Linux进程间通信三 System V 信号量简介与示例
1. System V信号量简介 SystemV信号量主要用于解决生产者和消费者问题,一个信号量能够控制多个资源,说它是信号量集也不为过. 2. API接口介绍 2.1 创建或打开信号量集 #incl ...
- Linux信号量 sem_t简介
简介请移步: https://blog.csdn.net/qq_19923217/article/details/82902442 https://blog.csdn.net/evsqiezi/art ...
- Linux 交叉编译简介
Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...
- 【Android 逆向】Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )
文章目录 一.Linux 权限简介 二.系统权限 / 用户权限 / 匿名用户权限 1.系统权限 2.用户权限 3.匿名用户权限 一.Linux 权限简介 Linux 是基于文件的系统 , 内存 , 设 ...
- Alpine Linux 使用简介
Alpine Linux使用简介 目录: 一.Alpine简要介绍 二.Alpine本地安装 三.Alpine在Docker下运行 四.Alpine的配置和使用 4.1网络相关文件 4.2更新国内源 ...
- WSL:WSL(Windows Subsystem for Linux)的简介、安装、使用方法之详细攻略
WSL:WSL(Windows Subsystem for Linux)的简介.安装.使用方法之详细攻略 目录 WSL的简介 WSL的安装 WSL的使用方法 WSL的简介 Windows Subsys ...
- linux快捷命令补齐,Linux Shell简介——自动补齐/命令行的历史记录/编辑命令行/可用的 Shell 快捷方式.doc...
Linux Shell简介--自动补齐/命令行的历史记录/编辑命令行/可用的 Shell 快捷方式 Unix (及后继者 Linux)在命令行下面诞生,因此,Unix 中的命令行有许多非常实用的功能. ...
- Linux的简介与虚拟机的管理
Linux的简介: 严格的来讲,Linux不算是一个操作系统,只是一个Linux系统中的内核,Linux的全称是GUN/Linux,这才算是一个真正意义上的Linux系统. Linux是一个多用户多任 ...
最新文章
- 爬虫的另一工具splash挑战selenium
- python 声明变量_Python的变量声明
- Spark UI (基于Yarn) 分析与定制
- THE NAUGHTY BOY
- CNN图片分类(Pytorch)
- pdf批量添加图章_还没找到适合自己的PDF阅读器吗,它来了
- 正则表达式(一):php常用的正则匹配
- 都说web前端开发薪资高,入行就有上万月薪,转行难吗?
- 彻底解决Android Studio Minimum supported Gradle version is X.Y.Z. Current version is x.y.z.问题
- 《Java程序员,上班那点事儿》荣登北京新华书店销售榜第2名,立贴纪念!
- 微信小程序 MinUI 组件库系列之 avatar 头像组件
- 弹性小球flash导航菜单源码
- Codeforces 1293 E. Xenon‘s Attack on the Gangs —— 树上记忆化搜索,单点加改成区间加,有丶东西
- 【Practical】决策系统与粗糙集
- 新冠全球确诊超2亿!德尔塔后,新「毒王」拉姆达已蔓延32国
- 底层网络知识详解:如何连接外网
- js 点击事件穿透 html,Js点击事件.html
- 【Redis】用windows客户端连接服务器上的Redis
- 计算机软件公司用ps是,[计算机软件及应用]PS培训.ppt
- 微信小程序如何批量生成带参数的小程序码,无需开发