首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 系统运维 >

Linux停多任务间通信和同步-System V信号量

2013-10-18 
Linux下多任务间通信和同步-System V信号量Linux下多任务间通信和同步-System V信号量嵌入式开发交流群280

Linux下多任务间通信和同步-System V信号量

Linux下多任务间通信和同步-System V信号量

嵌入式开发交流群280352802,欢迎加入!

一.简介

信号量与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机制.相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程也可以修改该标志.出了用于访问控制外,还可用于进程同步.信号量有以下两种类型:

    二值信号量:最简单的信号量形式,信号量的值只能取0或1;计算信号量:信号量的值可以取任意非负值(当然受内核本身的约束).
操作信号量的方法与消息队列类似,主要包括三种类型:
打开或创建信号量;增加或减少信号量的值;获得或设置信号量属性.信号量同步的原理实际上就是操作系统中所用到的PV原语.一次P操作使信号量sem减1,而一次V操作使信号量sem加1.进程(或线程)根据信号量的值来判断是否对共享资源具有访问权限.当sem的值大于等于0时,该进程(或线程)具有公共资源的访问权限;相反,当sem的值小于0时,该进程(或线程)将阻塞直到sem的值大于等于0为止.
信号量有两组系统调用函数.一种叫做System V信号量常用于进程的同步;另一种来源于POSIX,常用于线程同步.两者非常相似,但它们使用的函数调用却各不相同.本文介绍System V信号量的系统调用,后续的博文中介绍POOIX信号量.这组信号量系统调用的名字都以"sem"开头,基本的系统调用有三个:semget,semopt和semctl.

二.semget系统调用

该函数调用返回与键值key相对应的信号量描述子。其原型如下:


热点排行