程序間通訊之訊號量

2021-08-19 02:22:51 字數 1203 閱讀 9972

訊號量又稱為訊號燈,它是用來協調不同程序間的資料物件的(程序間資料同步)。本質聲,訊號量是乙個計數器,它用來記錄對某個資源的訪問狀況。一般來說,為了獲得共享資源,程序需要執行以下操作:

1.測試控制該資源的訊號量

2.若此訊號量的值為正,則允許進行使用該資源。程序將訊號量減1

3.若此訊號量為0,則該資源目前不可用,程序進入睡眠狀態,直至訊號量值大於0,程序被喚醒,轉入步驟1

4.當程序不再使用乙個訊號量控制的資源時,訊號量值加1。若此時有程序正在睡眠等待此訊號量,則喚醒此程序。

示例1.1

#include #include #include #include #include #define ipc_key 0x00001234

int sem_id = -1;

union semun ;

/* struct sembuf;*/

int sem_p()

int sem_v()

int main(int argc, char *argv)

semctl(sem_id, 0, setval, arg);

while (1)

semctl(sem_id, 0, ipc_rmid, null);

return 0;

}

示例1.2

#include #include #include #include #include #define ipc_key 0x00001234

int sem_id = -1;

int sem_p()

int sem_v()

int main(int argc, char *argv)

while (1)

return 0;

}

1.使用semget函式建立訊號量

2.使用semctl中的setval對訊號量進行初始化

3.同步前使用semop對訊號量進行檢測及p操作(減1)

4.同步完成對訊號量進行v操作(加1)

5.使用semctl中的ipc_rmid刪除訊號量

linux下檢視訊號量:sudo ipcs -s

linux刪除訊號量:ipcrm -s semid

程序間通訊之訊號量

訊號量的本質是一種資料操作鎖,其本身不具有資料交換的能力,而是通過控制其他的通訊資源 檔案 外部裝置 來實現程序間通訊,它本身只是一種外部資源的標識。訊號量在此過程中負責資料的互斥 同步等功能。當請求乙個訊號量來表示資源時,程序需要讀取訊號量的值來判斷資源是否可用。大於0,資源可以請求,等於0,無資...

程序間通訊之訊號量

訊號量的本質是一種資料操控鎖,它本身不具有資料交換的功能,而是通過來控制其他的通訊資源來實現程序間通訊的,訊號主要負責資料的同步與互斥功能。程序請求乙個使用訊號量來表示的資源時,首先要讀取訊號量的值來判斷資源是否能被使用,若訊號量的值大於0,資源可用,等於0,無資源可用,同時程序會進入睡眠狀態,直到...

程序間通訊之 訊號量

訊號量相當於記錄資源能同時被多少個程序訪問。訊號量的作用 程序間同步控制。訊號量有乙個初值,每當有程序申請使用訊號量,就會通過乙個p操作對訊號量進行 1操作,當計數器減到0的時候就說明沒有資源了,其他程序要想訪問就必須等待,當該程序執行完這段工作之後,就會執行v操作,即對訊號量進行 1操作。標頭檔案...