程序的同步的基本概念和訊號量機制

2021-08-28 11:23:22 字數 1929 閱讀 1559

程序同步機制的主要任務,是對多個相關程序在執行次序上進行協調,使併發執行的程序之間能夠按照一定的規則共享系統資源,並且很好地相互合作,從而使程式的執行具有可再現性。

一.兩種形式之間的制約關係

由於共享資源或者為完成某一任務相互合作,而產生制約關係

1.間接相互制約關係

多個程式在併發執行時,由於共享系統資源導致這些併發執行程式之間形成的相互制約關係。例如印表機這些臨界資源

2.直接相互制約關係

通過合作而產生的制約關係。例如只有a執行過後,b才能執行。而兩者都是為了完成某乙個功能。

臨界資源

只能乙個程序訪問的資源。程序之間採取互斥方式,實現對這種資源的共享。通過生產者—消費者問題(程序同步問題)可說明這一過程。 (具體不再說明該問題) 。

二.臨界資源

一次僅允許乙個程序使用的共享資源

三.臨界區

每個程序中訪問臨界資源的那段**稱為臨界區。可把乙個訪問臨界資源的迴圈程序描述如下:

while(true)

四.同步機制應遵循的規則

空閒讓進

忙則等待

有限等待

讓權等待:當程序不能進入自己的臨界區時,應立即釋放處理機,以免程序陷入忙等狀態。

訊號量機制是一種卓有成效的程序同步工具

訊號量的值只能由原語來改變

一·整形訊號量機制

wait(s)

signal(s)

又稱wait(s)和signal(s)為p,v操作,為原子操作,在執行時不可中斷。

wait操作中,只要訊號量s<=0,就會不斷地測試。因此,該機制並未遵循「讓權等待」 的準則,而是使程序處於「忙等」的狀態。

二·記錄型訊號量

記錄型訊號量是不存在「忙等」現象的程序同步機制。除了需要乙個用於代表資源數目的整型變數value外,再增加乙個程序鍊錶l,用於鏈結所有等待該資源的程序,記錄型訊號量是由於釆用了記錄型的資料結構得名。記錄型訊號量可描述為:

typedef struct semaphore;

相應的wait(s)和signal(s)的操作如下:

void wait (semaphore s)

}wait操作,s.value–,表示程序請求乙個該類資源,當s.value<0時,表示該類資源已分配完畢,因此程序應呼叫block原語,進行自我阻塞,放棄處理機,並插入到該類資源的等待佇列s.l中,可見該機制遵循了「讓權等待」的準則。

void signal (semaphore s)

}signal操作,表示程序釋放乙個資源,使系統中可供分配的該類資源數增1,故s.value++。若加1後仍是s.value<=0,則表示在s.l中仍有等待該資源的程序被阻塞,故還應呼叫wakeup 原語,將s.l中的第乙個等待程序喚醒。

s>=0 表示當前可用資源的數目

s<0 表示阻塞程序的個數

三.and型訊號量

and同步機制的基本思想是:將程序在整個執行過程中所需要的所有資源,一次性全部的分配給程序,帶程序使用完後再一起釋放。

and型訊號量適用於程序需要乙個或多個資源時。

**四.訊號量集

**在記錄型訊號量機制中,wait和signal操作只能進行加一減一的操作。當需要一次性需要申請n個同類資源時,需要進行n次操作,這顯然是低效的。為方便對資源的控制,每種資源在分配前需要檢查其數量是否在其極限值之上。為此,對and訊號量進行擴充。s為訊號量,d為需求量,t為下限值,對應的swait和ssignal格式為:

swait(s1,t1,d1,…,sn,tn,dn);

ssignal(s1,d1,…,sn,dn);

訊號量的互斥同步

訊號量的互斥同步都是通過pv原語來操作的,我們可以通過註冊兩個訊號量,讓它們在互斥的問題上互動,從而達到同步。通過下面例項就可以很容易理解 include include include include include include define return if fail p if p typ...

訊號量實現多程序的同步訪問

comm.h檔案 ifndef comm h define comm h include include include include include include include define pathname define proj id 06666 typedef union semun ...

訊號量的互斥與同步

一 訊號量互斥 公示欄問題 同學a在公示欄上寫 數學課取消 同學b然後又寫了 英語課考試 但是當,同學a寫下 數學課 後。出去了一下,這是同學b寫了 英語課考試 同學a再回來寫 取消 這時我們所要傳達的意思就完全不一樣了。所以需要引入互斥。1.訊號量 訊號量 又名 訊號燈 與其他進 程間通訊方式不大...