動機:共享資料的訪問
兩種型別使用者:
讀者:不需要修改資料
寫者:讀取和修改資料
問題的約束
允許同一時間有多個讀者,但在任何時候只有乙個寫者
當沒有寫者是讀者才能訪問資料
當沒有讀者和寫者時,寫者才能訪問資料
在任何時候只有乙個執行緒能操作共享變數
多個併發程序的資料集共享
rcount:有多少個讀者
writemutex:寫保護
讀者優先(訊號量的方式)
sem_wait
(writemutex)
; write;
sem_post
(writemutex)
;sem_wait
(countmutex);if
(rcount==0)
sem_wait
(writemutex)
;++rcount;
sem_post
(countmutex)
;read;
sem_wait
(countmutex)
;--rcount;
if(rcount==0)
sem_post
(wirtemutex)
sem_post
(countmutex)
寫者優先(管程方式)
database:
:read()
database:
:write()
ar =0;
//active readers
aw =0;
//active writers
wr =0;
//wait readers
ww =0;
//wait writers
condition oktoread;
condition oktowrite;
lock lock;
private database:
:startread()
ar++
; lock.release;
}private database:
:doneread()
lock.
release()
;}} private database:
:startwrite()
aw++
;lock.
release()
;}private database:
:donewrite()
else
if(wr>0)
lock.
release()
;}public database:
:write()
作業系統 讀者 寫者問題
讀者間可以同時訪問資源 任一寫者必須與其他寫者或者讀者互斥訪問共享資源 分析 寫者與任一程序互斥訪問共享資源 讀者互斥訪問readcount變數 1申請對檔案的使用權p mutex 2寫檔案 3釋放對檔案的使用權v mutex 設正在讀的讀者個數readcount初 0 1第乙個讀者來 申請對檔案的...
作業系統 讀者寫者問題
乙個資料檔案或記錄可以被多個程序共享。唯讀的程序為 reader程序 其他程序為 writer程序 允許多個物件同時讀乙個共享物件,但是不允許乙個writer程序和其他reader程序同時共享物件。使用記錄性訊號量解決讀者與寫者問題 互斥訊號量wmutex 實現reader與writer程序間在讀或...
作業系統 讀者寫者問題
有兩組併發程序 讀者和寫者,共享乙個檔案f 讀者可以同時讀取檔案 讀者和寫者不能同時對檔案進行操作 兩個讀者也不能同時對檔案進行操作 讀者優先模型 讀者不釋放寫者的臨界區資源,寫者就不能進行操作 int readcount 0 讀程序計數 semaphore writeblock,mutex 訊號量...