国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

經(jīng)典讀寫進(jìn)程問題的改進(jìn)算法

2017-07-20 12:11李廣軍
魅力中國 2016年45期
關(guān)鍵詞:同步進(jìn)程

李廣軍

【摘要】讀者-寫者問題是操作系統(tǒng)中經(jīng)典進(jìn)程同步問題之一,本文在闡述傳統(tǒng)解決讀者寫者問題方案的基礎(chǔ)上,給出了改進(jìn)解決方案和算法。

【關(guān)鍵詞】進(jìn)程; 同步; 互斥; 信號量

引言

利用信號量機(jī)制來實現(xiàn)讀者與寫者的同步問題,一直是操作系統(tǒng)中討論一個的經(jīng)典進(jìn)程同步問題.這類題型變化多、實例多,又與實際生活中的問題有著緊密聯(lián)系,本文利用信號量機(jī)制和wait、signal操作,在讀者-寫者問題傳統(tǒng)傳統(tǒng)解決方案的給出了兩種改進(jìn)解決方案.

1.讀寫同步問題及傳統(tǒng)解決方案

1.1 問題內(nèi)容

某共享文件,多個讀者(只讀文件進(jìn)程)和多個寫者(只寫文件進(jìn)程)在某個時間段內(nèi)對該文件資源異步進(jìn)行讀寫.為避免文件數(shù)據(jù)出現(xiàn)丟失修改和讀臟數(shù)據(jù)的情況,對讀者寫者要求如下:

(1)讀-讀共享,即允許多個讀者同時對文件進(jìn)行讀操作.

(2)讀-寫互斥,即不允許讀者和寫者同時對文件分別進(jìn)行讀寫操作.

(3)寫-寫互斥,即不允許多個寫者同時對文件進(jìn)行寫操作.

1.2 傳統(tǒng)解決方案

解決方案:為實現(xiàn)讀者與寫者進(jìn)程間在讀寫和寫寫互斥設(shè)置一個互斥信號量Wmutex.另外,再設(shè)置一個整型變量Readercount表示正在讀的進(jìn)程數(shù)目.由于只要有一個讀進(jìn)程在讀,便不允許寫進(jìn)程去寫.因此,僅當(dāng)Readercount =0,表示尚無讀進(jìn)程在讀時,讀進(jìn)程才需要執(zhí)行Wait(Wmutex)操作.若Wait(Wmutex)操作成功,讀進(jìn)程便可去讀,相應(yīng)地做Readercount+1操作.同理,僅當(dāng)讀進(jìn)程在執(zhí)行了Readercount-1操作后其值為0時,才須執(zhí)行Signal(Wmutex)操作,以便讓寫進(jìn)程操作.又因為Readercount是一個可被多個讀進(jìn)程訪問的臨界資源,因此,也應(yīng)該為它設(shè)置一個互斥信號量Rmutex.

2.讀寫問題改進(jìn)解決方案

2.1 讀寫同步公平競爭解決方案

解決方案:為實現(xiàn)讀者與寫者進(jìn)程間在讀寫和寫寫互斥設(shè)置一個互斥信號量Wmutex.另外,再設(shè)置一個整型變量Readercount表示正在讀的進(jìn)程數(shù)目.由于只要有一個讀進(jìn)程在讀,便不允許寫進(jìn)程去寫.因此,僅當(dāng)Readercount =0,表示尚無讀進(jìn)程在讀時,讀進(jìn)程才需要執(zhí)行Wait(Wmutex)操作.若Wait(Wmutex)操作成功,讀進(jìn)程便可去讀,相應(yīng)地做Readercount+1操作.同理,僅當(dāng)讀進(jìn)程在執(zhí)行了Readercount-1操作后其值為0時,才須執(zhí)行Signal(Wmutex)操作,以便讓寫進(jìn)程操作.又因為Readercount是一個可被多個讀進(jìn)程訪問的臨界資源,因此,也應(yīng)該為它設(shè)置一個互斥信號量Rmutex.

算法描述:

Var Rmutex,Wmutex:semaphore:=1,1;

Readercount:integer:=0;

Reader(讀者進(jìn)程)

begin

repeat

wait(Rmutex);

if Readercount=0 then wait(Wmutex);

Readercount:= Readercount+1;

signal(Rmutex);

……

perform read operation;

……

wait(Rmutex);

Readercount:= Readercount-1;

if Readercount=0 then signal(Wmutex);

signal(Rmutex);

until false;

end

writer(寫者進(jìn)程)

begin

repeat

wait(Wmutex);

……

perform write operation;

……

signal(Wmutex);

until false;

end

結(jié)果分析:該方案已經(jīng)基本滿足題目要求,但讀者的高優(yōu)先級可能造成后續(xù)的寫者由于被隨后而來的讀者插隊而長時間等待,直到全部讀者進(jìn)程運行完畢后,才可以使用文件.所以說上述算法為讀者優(yōu)先方案.

2.2 寫者優(yōu)先的解決方案

在原讀者-寫者問題上增加兩點要求(1)僅當(dāng)無寫者時才允許讀者使用文件;(2)多個讀寫進(jìn)程等待時首先考慮喚醒寫者.

算法描述:

Var Rmutex,Wmutex, Wcmutex,Idmutex ,Enmutex:semaphore:=1,1,1,1,1;

Readercount,writercount:integer:=0,0;

Reader(讀者進(jìn)程)

begin

repeat

wait(Enmutex);

wait(Idmutex);

wait(Rmutex);

if Readercount=0 then wait(Wmutex);

Readercount:= Readercount+1;

signal(Rmutex);

signal(Idmutex);

signal(Enmutex);

……

perform read operation;

……

wait(Rmutex);

Readercount:= Readercount-1;

if Readercount=0 then signal(Wmutex);

signal(Rmutex);

until false;

end

writer(寫者進(jìn)程)

begin

repeat

wait(Wcmutex)

if writercount=0 then wait(Idmutex);

writercount:=writercount+1;

signal(Wcmutex);

wait(Wmutex);

……

perform write operation;

……

signal(Wmutex);

wait(Wcmutex)

writercount:=writercount-1;

if writercount=0 then signal(Idmutex);

signal(Wcmutex);

until false;

end

結(jié)果分析:該方案在滿足讀寫同步問題要求的前提下也實現(xiàn)寫者進(jìn)程優(yōu)先的要求.

3.結(jié)論

讀寫同步問題是進(jìn)程同步問題中的經(jīng)典實例,若對它問題能熟練掌握的話,那么對于常見一類進(jìn)程多次訪問,而不同類的進(jìn)程必須互斥訪問資源的控制這類問題也就不難解決了.

參考文獻(xiàn)

[1]帖軍,陸際光.同步互斥機(jī)制中的讀者-寫者模型[J].武漢:中南民族大學(xué)學(xué)報.2013-09

[2]湯子瀛,哲鳳屏.計算機(jī)操作系統(tǒng)[M].西安:西安電子科技大學(xué)出版社.2012-04

[3]趙素萍.淺談信號量的設(shè)置與使用[J].福建:福建電腦 2013-10

[4]程曉錦."讀者-寫者"問題的Java實現(xiàn)[J].北京:北京印刷學(xué)院學(xué)報,2010-03

[5]房永龍,周書民.基于線程的短信實時并發(fā)算法[J].上海:計算機(jī)應(yīng)用與軟件 2016-04

[6]夏春梅.用記錄型信號量解決讀者—寫者問題[J].安微:機(jī)械工業(yè)出版社,2012-06

猜你喜歡
同步進(jìn)程
多核一個都不落CPU極限這樣用
Dalvik虛擬機(jī)進(jìn)程模型研究
快速殺掉頑固進(jìn)程
不留死角 全方位監(jiān)控系統(tǒng)
誰在后臺偷偷搞“串聯(lián)”
素質(zhì)教育理念下藝術(shù)教育改革的思路
政府職能的轉(zhuǎn)變與中國經(jīng)濟(jì)結(jié)構(gòu)調(diào)整的同步
公共藝術(shù)與城市設(shè)計的協(xié)調(diào)與同步
中外民主法制進(jìn)程專題復(fù)習(xí)
時間統(tǒng)一系統(tǒng)秒同步故障遠(yuǎn)程預(yù)警系統(tǒng)設(shè)計