IPC 訊號量集

2021-07-16 07:45:22 字數 1279 閱讀 4874

ipc通訊機制-訊號量集

1.int semget(key_t key,int nsems, int sem***);

第乙個引數是由ftok()獲取的key ,

第二個引數是要建立的訊號量的個數,如果是0表示獲取訊號量集id

第三個引數是ipc_creat,建立訊號量集id。

返回乙個訊號量集的id  semid.

semid=semget(key,10,ipc_creat|0660);

2. int semop(int semid,struct sembuf *sops,unsigned nsops);

第乙個引數是 訊號量集的id,

第二個引數是要操作的結構體;

struct sembuf

第三個引數是指 sops 結構體的個數,恆大於或等於1;

3. int semctl(int semid,int semnum,int cmd,...);

第乙個引數是訊號量集的id;

第二個引數是對第幾個訊號量進行操作,0代表第乙個;

第三個引數是要進行什麼操作;

可以有第四個引數,第四個引數是乙個聯合:

union semun

struct  seminfo ;

struct semid_ds ;

struct ipc_perm ;

第三個引數:

ipc_stat讀取乙個訊號量集的資料結構semid_ds,並將其儲存在semun中的buf引數中。

ipc_set設定訊號量集的資料結構semid_ds中的元素ipc_perm,其值取自semun中的buf引數。

ipc_rmid將訊號量集從記憶體中刪除。

getall用於讀取訊號量集中的所有訊號量的值。

getncnt返回正在等待資源的程序數目。

getpid返回最後乙個執行semop操作的程序的pid。

getval返回訊號量集中的乙個單個的訊號量的值。

getzcnt返回這在等待完全空閒的資源的程序數目。

setall設定訊號量集中的所有的訊號量的值。

setval設定訊號量集中的乙個單獨的訊號量的值。

返回值:

根據不同的cmd返回不同的值;

getncnt     the value of semncnt.

getpid      the value of sempid.

getval      the value of semval.

getzcnt     the value of semzcnt.

其他cmd成功返回0;

IPC之 訊號量集 多個訊號量

如果兩個程序不僅需要同步,還要保證先後執行順序,就要用兩個訊號量 互斥鎖 來解決 柵欄模型 實現以下框架中的四個子程序 所有程序做完任務後 在一起執行下一次 include include include include include include include include define ...

IPC物件之訊號量

1.訊號量 1 訊號量 semaphore 也叫訊號燈。它是不同程序間或乙個給定程序內部不同執行緒間同步的機制。2 二值訊號量 值為0或1。與互斥鎖類似,資源可用時值為1,不可用時值為0。3 計數訊號量 值在0到n之間。同來統計資源,其值代表可用資源數。4 等待操作是等待訊號量的值變為大於0,然後將...

訊號量集(主要是AND訊號量)

訊號量集 當利用訊號量機制解決了單個資源的互斥訪問後,我們討論如何控制同時需要多個資源的互斥訪問。訊號量集是指同時需要多個資源時的訊號量操作。1 and型訊號量集 and型訊號量集是指同時需要多個資源且每種占用乙個資源時的訊號量操作。當一段處理 需要同時獲取兩個或多個臨界資源時,就可能出現由於各程序...