訊號量
訊號量(又名:訊號燈)與其他程序間通訊方式不大相同,主要用途是保護臨界資源(程序互斥)。程序可以根據它判定是否能夠訪問某些共享資源。除了用於訪問控制外,還可以用於程序同步。
訊號量分類:
二值訊號量:訊號量的值只能取0或1
計數訊號量:訊號量的值可以取任意非負值
建立/開啟訊號量集合
函式名:semget
函式原型:int semget(key_t key, int nsems, int sem***);
函式功能:獲取訊號量集合的識別符號,當key所指定的訊號量不存在時並semflag為ipc_creat時建立訊號量集合
標頭檔案:
返回值:成功:返回訊號量集合的識別符號 失敗:-1
引數說明:key:訊號量對應的鍵值
semflag:標誌,可以取ipc_creat
nsems:建立的訊號量集合裡面包含的訊號量數目
(指定鍵值):
* 任意指定乙個數:缺點:這個數已經被別的ipc物件(訊息佇列,共享記憶體)所使用,在與新建立的訊號量關聯時就會失敗。
* 構造乙個盡量不會被別的ipc物件用到的數,方法 key_t ftok(char *fname, int id);
操作訊號量
函式名:semop
函式原型:int semop(int semid, struct sembuf *sops, unsigned nsops);
函式功能:操作訊號量集合裡的訊號量
標頭檔案:
返回值:成功:0 失敗:-1
引數說明:semid:要操作的訊號量集合的識別符號
nsops:要操作多少個訊號量
sops:對訊號執行什麼樣的操作
/* student1.c */
#include #include #include #include #include #include void main()
/* student2.c */
#include #include #include #include #include #include void main()
執行結果board.txt為:class math is cancel english exam
而不是class math english exam
is cancel
訊號量 互斥量
lonelycatcher if only as first.來自 訊號量用在多執行緒多工同步的,乙個執行緒完成了某乙個動作就通過訊號量告訴別的執行緒,別的執行緒再進行某些動作 大家都在semtake的時候,就阻塞在 而互斥鎖是用在多執行緒多工互斥的,乙個執行緒占用了某乙個資源,那麼別的執行緒就無法...
訊號量和互斥量
1.互斥量用於執行緒的互斥,訊號線用於執行緒的同步。這是互斥量和訊號量的根本區別,也就是互斥和同步之間的區別。互斥 是指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。同步 是指在互斥的基礎上 大多數情況 通過其它機制實現訪問者對資...
訊號量,互斥鎖
注 摘自 程式設計師的自我修養 相關章節。關鍵字 執行緒同步 原子操作 鎖 二元訊號量 訊號量 互斥量 臨界區 讀寫鎖 條件變數 原子操作 共享資料 全域性變數或堆變數 的自增 操作在多執行緒環境下會出現錯誤是因為這個操作 一條c語句 被編譯為彙編 後不止一條指令,因此在執行的時候可能執行了一半就被...