信号量:进程同步控制
共享资源(临界资源):同一时刻只允许一个进程使用的资源
临界区 ---》 使用临界资源的代码区域
原子操作 ----》 不能被中断的操作
P、V操作:
P操作 -1 使用资源之前进行P操作
V操作 +1 使用资源之后释放资源
信号量定义:对资源访问控制的计数器。当其>0时,计数器的值代表能被访问的临界资源的个数。当其<0时,代表等待使用临界资源的进程个数。
信号量操作:
创建获取:
int semget((key_t) key, int nsems, int flg);
如果semget调用的是创建信号量集,那么nsems就代表信号量集中信号量的个数。否则,nsems无作用。
参数解释:
key:所创建或打开信号量集的键值。需要是唯一的非零整数。
nsems:创建的信号量集中的信号量的个数,该参数只在创建信号量集时有效。几乎总是取值为1.
flag:调用函数的操作类型,也可用于设置信号量集的访问权限,两者通过 | 表示
返回值说明:
如果成功,则返回信号量集的IPC标识符(一个正数)。
如果失败,则返回-1,errno被设定成以下的某个值
EACCES:没有访问该信号量集的权限
EEXIST:信号量集已经存在,无法创建
EINVAL:参数nsems的值小于0或者大于该信号量集的限制;或者是该key关联的信号量集已存在,并且nsems