Linux中进程通讯--信号量
来源:互联网 发布:sqlserver 图标 编辑:程序博客网 时间:2024/05/16 14:41
前面写了Linux进程通讯中的管道(有名管道和无名管道),前两天学习了信号量,今天我们就来写一下信号量。
首先要明确一点,信号量和信号不是一样的。信号量(Semaphore),有时被称为信号灯,是在多环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。信号:(signal)是一种处理异步事件的方式。信号时比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程外,还可以发送信号给进程本身。
信号量和已经介绍过的IPC机构管道不同,它是一个计数器。用于多进程对共享数据对象的访问。
信号量的作用:进程间同步控制。信号量相当于记录资源能同时被多少个进程访问。
下面我们来看一下信号量的操作:
1、创建或获取:如果是创建必须要初始化,如果是获取则不能初始化。
2、减一操作:P操作
3、加一操作:V操作
4、删除
//获取或者创建
它的作用是改变信号量的值,原型为:
第一个参数key是整数值(唯一非零),不相关的进程可以通过它访问一个信号量,它代表程序可能要使用的某个资源,程序对所有信号量的访问都是间接的,程序先通过调用semget函数并提供一个键,再由系统生成一个相应的信号标识符(semget函数的返回值),只有semget函数才直接使用信号量键,所有其他的信号量函数使用由semget函数返回的信号量标识符。如果多个程序使用相同的key值,key将负责协调工作。
第二个参数num_sems指定需要的信号量数目,它的值几乎总是1。
第三个参数sem_flags是一组标志,当想要当信号量不存在时创建一个新的信号量,可以和值IPC_CREAT做按位或操作。设置了IPC_CREAT标志后,即使给出的键是一个已有信号量的键,也不会产生错误。而IPC_CREAT | IPC_EXCL则可以创建一个新的,唯一的信号量,如果信号量已存在,返回一个错误。
semget函数成功返回一个相应信号标识符(非零),失败返回-1.
//P,V操作
该函数用来直接控制信号量信息,它的原型为:
sem_id是由semget返回的信号量标识符,sembuf结构的定义如下:
//初始化 删除
该函数用来直接控制信号量信息,它的原型为:
如果有第四个参数,它通常是一个union semum结构,定义如下:
前两个参数与前面一个函数中的一样,command通常是下面两个值中的其中一个
SETVAL:用来把信号量初始化为一个已知的值。p 这个值通过union semun中的val成员设置,其作用是在信号量第一次使用前对它进行设置。
IPC_RMID:用于删除一个已经无需继续使用的信号量标识符。
阅读全文
0 0
- Linux中进程通讯--信号量
- linux 进程间通讯--信号量
- linux进程通讯之信号量
- Linux进程间通讯之信号量
- Linux进程间通讯之信号量sem
- (四)linux进程通讯、信号量
- Linux—进程间通讯—信号量
- Linux进程间通讯四--信号量通讯机制
- 进程通讯-信号量
- 进程间通讯:信号量
- 进程间通讯--信号量
- linux进程间通讯-System V IPC 信号量
- Linux笔记_进程通讯——信号量
- linux-进程间通讯(信号量,共享内存)
- linux-基础-进程通讯(二)-消息队列/信号量
- Linux中进程通讯--无名管道
- 进程间通讯之信号量(实例)
- 进程间通讯---信号量练习(二)
- python-代码。遇到的错误集锦
- flume数据采集
- 栈和队列判断回文数
- 匿名函数、嵌套函数、闭包是怎么回事?
- 1047. 编程团体赛(20)
- Linux中进程通讯--信号量
- INSERT 语句与 FOREIGN KEY SAME TABLE 约束"FK__Course__Cpno__1367E606"冲突。该冲突发生于数据库"student",表"dbo.Course",
- 【LeetCode 4-5】4.Median of Two Sorted Arrays 5.Longest Palindromic Substring
- Java五种字符串连接的性能比较
- 单向循环链表C语言实现
- 贪心算法——完美的代价
- 第八周项目三(4)—顺序串算法之串中字符的替换
- 代码块、继承、final关键字
- 初识Linux--Linux常用的命令小结