Attention: http://www.linuxidc.com/Linux/2012-03/57249p5.htm
一. POSIX有名信号灯
所谓有名就是给一个类似句柄的key。
1.创建并初始化有名信号灯
函数:sem_open
#include<semaphore.h>
sem_t *sem_open( const char *name, int oflag, mode_t mode, unsigned intval );
参数:
name:信号灯的名称
oflag:选择创建或者打开一个现有的信号灯
mode:权限位(进程中已经讲过,差不多)
val:信号灯的初始值
成功时返回指向信号灯的指针,出错时为SEM_FAILED
oflag可以取值为:0,O_CREAT(创建),O_CREAT | O_EXCL(没有指定就创建)
if oflag指定了参数有O_CREAT,那么后面的mode和val参数是必须的!!!
注意:val的值大小不能超过SEM_VALUE_MAX < 32767。
一般有两种信号灯: 互斥信号灯(二值),所以val = 1
计数信号灯,一般val > 1
注意参数 O_CREAT与O_CREAT | O_EXCL的区别
>>>>>>>: 前者的意思是: 如果所需信号灯尚未存在,那就创建并初始化它
所以即使是已经存在此信号量,指定此参数也不会报错。
后者则不一样,其实是保证了唯一性,也就是if已经有了,那么就会报错。