十四.进程间通讯(IPC机制)——信号量
1.概念
信号量:多个进程访问相同资源会出现冲突,信号量是特殊的变量,值>=0。值的大小代表可用资源的数目
同步进程:同一个时刻,只能有一个进程访问资源。进程间同步
临界资源:同一个时刻只允许一个进程访问的资源
临界区:访问临界资源的代码段
p操作:获取资源
v操作:释放资源
注:一个进程创建信号量,只能该进程访问。
两个进程访问信号量,id号->内核
2.信号量使用的API接口
2.1semget()创建或者获取已存在的信号量
成功返回信号量的ID,失败返回-1
key:两个进程使用相同key值,就可以使用同一个信号量
nsems:内核维护的一个信号量集,在新建信号量时,
semflg可选变量:IPC_CREAT IPC_EXCL
2.2semop()对信号量进行改变
成功返回0,失败返回-1
P,V操作 IPC_UNDO
p() 获取资源,程序异常终止,未释放资源,内核释放
IPC_NOWAIT,打印错误信息
2.3semctl(int semid,int semnum,int cmd,…)控制信号量
成功返回0,失败返回-1
cmd选项:SETVAL IPC_RMID
3.封装
初始化信号量:sem_init(); //semget+semctl创建
//semget 获取信号量
p操作:sem_p(); semop();
v操作:sem_v(); semop();
批量销毁信号量:sem_destory(); //semctl