信號量主要用來實現進程間的同步問題,避免併發訪問共享資源
在實際應用中,兩個進程間通信可能會使用多個信號量,因此Linux在管理是以信號量集來管理
信號量集合使用指針指向一個由數組組成的信號量單元,在此信號量單元中存儲了個信號量的值
1、創建信號量集合(semget)
2、控制信號量集合、信號量(semctl)
該函數最多可有4個函數。當第三個參數爲SETVAL/SETALL,即對信號量的設置,就要有第四個參數
- 如果操作是SETVAL,則第四個值爲val,是相應信號量的值。
- 如果操作爲SETALL&GETALL,則第四個參數爲數組地址。
刪除信號量
將semctl
函數的第二個參數設爲IPC_RMID;
或者用命令刪除ipcrm -S key
;
3、信號量操作(semop)
用semop函數完成PV操作
struct sembuf
{
unsigned short sem_num; /* semaphore number */ 信號量下標
short sem_op; /* semaphore operation */ -1 / +1
short sem_flg; /* operation flags */ 0
}
struct sembuf sops[2];
/*P操作*/
sops[0].sem_num=1;
sops[0].sem_op=-1;
sops[0].sem_flg=0;
/*V操作*/
sops[1].sem_num=2;
sops[1].sem_op=1;
sops[1].sem_flg=0;
上面的代碼表示對信號量1進行P操作(-1),對第二個信號量進行V操作(+1)