信號量

信號量主要用來實現進程間的同步問題,避免併發訪問共享資源

在實際應用中,兩個進程間通信可能會使用多個信號量,因此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)


發佈了78 篇原創文章 · 獲贊 15 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章