linuc C 程序通訊——訊號量
阿新 • • 發佈:2019-02-19
1、訊號量:
訊號量可以提供這樣的一種訪問機制,讓一個臨界區同一時間只有一個執行緒在訪問它,也就是說訊號量是用來調協程序對共享資源的訪問的。 大致為不同任務之間的資料通訊,達到不同任務的排程。
2、實現
semop() 改變訊號量值
int semop(int sem_id, struct sembuf *sem_opa, size_t num_sem_ops); struct sembuf{ short sem_num;//除非使用一組訊號量,否則它為0 short sem_op;//訊號量在一次操作中需要改變的資料,通常是兩個數,一個是-1,即P(等待)操作, //一個是+1,即V(傳送訊號)操作。 short sem_flg;//通常為SEM_UNDO,使作業系統跟蹤訊號, //並在程序沒有釋放該訊號量而終止時,作業系統釋放訊號量 }
P(sv):如果sv的值大於零,就給它減1;如果它的值為零,就掛起該程序的執行
V(sv):如果有其他程序因等待sv而被掛起,就讓它恢復執行,如果沒有程序因等待sv而掛起,就給它加1.
3、 semctl () 控制訊號量
(得到一個訊號量集識別符號或建立一個訊號量集物件)
int semctl(int sem_id, int sem_num, int command, ...);
union semun {
int val;
struct semid_ds *buf;
unsigned short *array;
}