讀者寫者問題 作業系統

2021-09-28 07:30:55 字數 1432 閱讀 5308

動機:共享資料的訪問

兩種型別使用者:

讀者:不需要修改資料

寫者:讀取和修改資料

問題的約束

允許同一時間有多個讀者,但在任何時候只有乙個寫者

當沒有寫者是讀者才能訪問資料

當沒有讀者和寫者時,寫者才能訪問資料

在任何時候只有乙個執行緒能操作共享變數

多個併發程序的資料集共享

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 訊號量...