訊號量的互斥與同步

2021-08-06 05:37:41 字數 1942 閱讀 9422

一、訊號量互斥

公示欄問題:同學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...