訊號量互斥程式設計

2021-07-02 01:15:17 字數 1288 閱讀 8559

訊號量

訊號量(又名:訊號燈)與其他程序間通訊方式不大相同,主要用途是保護臨界資源(程序互斥)。程序可以根據它判定是否能夠訪問某些共享資源。除了用於訪問控制外,還可以用於程序同步。

訊號量分類:

二值訊號量:訊號量的值只能取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語句 被編譯為彙編 後不止一條指令,因此在執行的時候可能執行了一半就被...