linux下多值信号量的操作探讨
2017-04-01许豪单平平
许豪++单平平
摘要:本文简单介绍了Linux下信号量通信机制的发展历史,信号量通信的特点,主要针对信号量的操作进行分析,其中包括创建信号量集合,修改信号量集合中某个信号量的值,如何获得信号量集合中某个信号量的值。文章最后给出多值信号量操作的实例,并且指出多值信号量操作时应该关注的重点问题。
关键词:信号量 进程间通信 操作
中图分类号:TP368.1 文献标识码:A 文章编号:1007-9416(2016)10-0240-01
1 Linux信号量通信机制发展史
Linux操作系统中有多种进程间通信方式。本文主要围绕信号量这种进程间通信方式进行阐述。信号量的概念最早由荷兰学者Edsger Dijkstra于1965年提出,目前已经发展成一种卓有成效的进程间通信机制。通过该机制可以有效的控制两个进程对共享资源的同步访问操作。
2 Linux单值信号量的操作
当信号量集合中只有一个信号量的时候,可以直接调用函数semop(int semid, struct sembuf *opsptr, size_t nops)来完成操作。其中第一个参数semid是信号量集合的标识符,即semget函數执行成功后的返回值;第二个参数opsptr比较复杂,是struct sembuf类型的结构体,该结构体与我们对信号量的操作紧密相关。结构体原型为struct sembuf {short sem_num; short sem_op; short sem_flg; };有三个属性,第一个属性sem_num为信号量在信号量集合中的编号;第二个属性sem_op为当前信号量需要改变的值,如果该属性为正值,则在当前信号量基础之上增加sem_op,如果该属性为负值,则在当前信号量值的基础上减去sem_op,第三个属性为标志位,当取值为SEM_UNDO时,表示进程结束后由内核释放信号量发生改变的值。semop函数中的第三个参数表示对该信号量操作的次数。……
