当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 信号量是什么,让你几分钟弄懂

信号量是什么,让你几分钟弄懂 时间:2018-07-16      来源:未知

在了解和学习信号量之前,我们需要明确一点,信号量和信号不同,切勿将信号和信号量混淆,因为二者根本不是一个概念。

一、 什么是信号量?

为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任何时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。

信号量是一个特殊的变量,程序对其访问都是原子操作,且只提供它等待或者发送两种操作,也就是P操作和V操作。何为P/V操作:举个例子,我们平常最常见也最简单的信号形式——二值信号量。P操作则是对等待的信号量的值进行减一操作,而V操作则是对某一个信号量执行加一操作。这里我们暂时也仅针对于二值信号量来讨论。

二、信号量的工作原理

信号量只能进行两种操作等待和发送信号,即P操作和V操作,他们的行为是这样的:

P:如果信号量的值大于零,就给它减1;如果它的值为零,就挂起该进程的执行直到

该信号量的值不为一为止。

V:如果有其他进程因等待该信号量而被挂起,就让它恢复运行,如果没有进程因等待该 信号量而挂起,就给它加1。

三、 POSIX信号量相关函数

int sem_init(sem_t *sem, int pshared, unsigned int value);

int sem_wait(sem_t *sem);

int sem_post(sem_t *sem);

sem_init可以设置信号量的初始值和初始状态,sem_wait则会等待指定信号量,如果该值为0,则等待,否则对信号量的值减一并获取资源,即P操作。sem_post则对指定信号量的值加一,即V操作。

四、 总结

信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待(即P(信号变量))和发送(即V(信号变量))信息操作。我们通常通过信号来解决多个进程或线程对同一资源的访问竞争的问题。

上一篇:波特率是什么,让你详细了解

下一篇:管道通信: 有名管道 无名管道,行业大牛通通教会你

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部