一、訊號量互斥
公示欄問題:同學a在公示欄上寫「數學課取消」,同學b然後又寫了「英語課考試」。但是當,同學a寫下「數學課」後。出去了一下,這是同學b寫了「英語課考試」,同學a再回來寫「取消」。這時我們所要傳達的意思就完全不一樣了。所以需要引入互斥。
1. 訊號量
訊號量(又名:訊號燈)與其他進
程間通訊方式不大相同,主要用
途是保護臨界資源(程序互斥)。
程序可以根據它判定是否能夠訪
問某些共享資源。除了用於訪問
控制外,還可用於
程序同步
。2.訊號量分類:
二值訊號燈:訊號燈的值只能取0或1
計數訊號燈:訊號燈的值可以取任意非負值。
3.指定鍵值①任意指定乙個數
缺點:這個數已經被別的ipc物件(訊息佇列,共享記憶體)
所使用了,在與新建立的訊號量關聯時就會失敗。
②構造乙個盡量不會被別的ipc物件用到的數
方法:使用key_t ftok( char * fname, int id )
ftok工作原理:將fname和id相組合,組成乙個訊號量
4.程式**
student1.c
#include
#include
#include
#include
#include
#include
void main()/
*獲取訊號量*
/sops.sem_num = 0;
sops.sem_op =
-1;ret = semop(semid,
&sops,1);/
*1.向檔案公告板寫入「數學課」*
/write(fd,
"class math "
, 11);/
*2.暫停休息*
/sleep(10);/
*3.向公告板寫入「取消」*
/write(fd,
"is cancel "
,11);/
*釋放訊號量*
/sops.sem_num = 0;
sops.sem_op = 1;
ret = semop(semid,
&sops, 1)
;close(fd);}
student2.c
#include
#include
#include
#include
#include
#include
void main(
)二、訊號量同步
1.程序同步
一組併發程序進行互相合作、互相等待,
使得各程序按一定的順序執行的過程稱為
程序間的同步。
2.生產者消費者問題
生產者生產完產品後,消費者才能把產品拿走。如果還沒生產完,消費者就拿走的話,會造成不同步。
3.程式**
通過生產者設定訊號量為0後,只有生產完產品才釋放訊號量。之後消費者才能取走產品。
productor.c
#include
#include
#include
#include
#include
#include
void main(
) customer.c
#include
#include
#include
#include
void main()
0 給主人留下些什麼吧!~~
互斥量與訊號量(互斥與同步)
互斥量 mutex 互斥量表現互斥現象的資料結構,也被當作二元訊號燈。乙個互斥基本上是乙個多工敏感的二元訊號,它能用作同步多工的行為,它常用作保護從中斷來的臨界段 並且在共享同步使用的資源。mutex本質上說就是一把鎖,提供對資源的獨佔訪問,所以mutex主要的作用是用於互斥。mutex物件的值,只...
訊號量的互斥同步
訊號量的互斥同步都是通過pv原語來操作的,我們可以通過註冊兩個訊號量,讓它們在互斥的問題上互動,從而達到同步。通過下面例項就可以很容易理解 include include include include include include define return if fail p if p typ...
執行緒同步與互斥 訊號量
關於訊號量,我們在前面程序間通訊也談到過,今天我們再來看看使用訊號量實現執行緒間的同步與互斥問題。再來說說什麼是訊號量?號量的操作函式。sem init 用來初始化乙個訊號量,sem t sem是自己定義的sem變數的位址,pshared引數為0,用於表示訊號量用於同一程序間的執行緒間同步,valu...