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