1. 程式人生 > >linuc C 程序通訊——訊號量

linuc C 程序通訊——訊號量

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;
}