Perteson互斥算法的理解

引用自 計(jì)算機(jī)系統(tǒng) 核心概念及軟硬件實(shí)現(xiàn)

第一次嘗試實(shí)現(xiàn)互斥

#嘗試編程實(shí)現(xiàn)互斥

#進(jìn)程1
do
    while (turn != 1)
        ; //nothing
    cirtical section
    turn = 2;
    remainder section
while ( ! done1);

#進(jìn)程2
do
    while (turn != 2)
        ; //nothing
    critical section
    turn = 1;
    remainder section
while (! done2);

此算法保證了互斥,但要求進(jìn)程嚴(yán)格交替執(zhí)行do循環(huán),存在問題:如果一直想執(zhí)行進(jìn)程1而不執(zhí)行進(jìn)程2,那么此實(shí)現(xiàn)時(shí)無法做到的

第二次嘗試實(shí)現(xiàn)互斥

#編程實(shí)現(xiàn)互斥的另一次嘗試

#進(jìn)程1
do
    enter1 = TRUE;
    while (enter2)
        ; //nothing
    critical section
    enter1 = FALSE;
    remainder section
while (! done1);

#進(jìn)程2
do
    enter2 = TRUE;
    while (enter1)
        ; //nothing
    critical section
    enter2 = FALSE;
    remainder section
while (! done2);

此算法保證了互斥,也能夠?qū)崿F(xiàn):某一進(jìn)程多次執(zhí)行而另一線程不被執(zhí)行绳泉。
但,此算法有死鎖:進(jìn)程1設(shè)置enter1為TRUE后陈轿,調(diào)度進(jìn)程2圈纺,進(jìn)程2設(shè)置enter2為TRUE,然后進(jìn)程2判斷while (enter1)麦射,此循環(huán)耗盡時(shí)間片(進(jìn)程2無法進(jìn)入臨界區(qū)蛾娶、后續(xù)執(zhí)行代碼),調(diào)度進(jìn)程1潜秋,進(jìn)程1判定while (enter2)條件也成立蛔琅,循環(huán)而無法進(jìn)入臨界區(qū)、執(zhí)行后續(xù)代碼峻呛,死鎖形成罗售。

Perterson互斥算法

#Perterson互斥算法

#進(jìn)程1
do
    enter1 = TRUE;
    turn = 2;
    while (enter2 && (turn == 2))
        ; //nothing
    critical section
    enter1 = FALSE;
    remainder section
while (! dine1);

#進(jìn)程2
do
    enter2 = TRUE;
    turn = 1;
    while (enter1 && (turn == 1))
        ; //nothing
    critical section
    enter2 = FALSE;
    remainder section
while (! done2);

直接理解Peterson算法,可能略顯晦澀钩述,不好區(qū)分enter和turn的含義寨躁,梳理Peterson算法的邏輯含義。

怎么理解Perterson算法呢牙勘?我們給出一個(gè)與上述算法類似的編碼實(shí)現(xiàn)职恳,對比方便理解:

#Perterson算法的類比編碼實(shí)現(xiàn)

/*此實(shí)現(xiàn)直觀地結(jié)合了“第一次嘗試實(shí)現(xiàn)互斥”和“第二次嘗試實(shí)現(xiàn)互斥”*/

#進(jìn)程1
do
    enter1 = TRUE;
    while (enter2 && (turn == 2))
        ; //nothing
    critical section
    enter1 = FALSE;
    turn = 2;
    remainder section
while ( !done1);

#進(jìn)程2
do
    enter2 = TRUE;
    while (enter1 && (turn == 1))
        ; //nothing
    critical section
    enter2 = FALSE;
    turn = 1;
    remainder section
while (! done2)

上面這個(gè)編碼實(shí)現(xiàn),結(jié)合了前兩種編碼實(shí)現(xiàn)方式(第一次嘗試實(shí)現(xiàn)互斥方面、第二次嘗試實(shí)現(xiàn)互斥)放钦,可以達(dá)到互斥、某一線程持續(xù)調(diào)度恭金、無死鎖的設(shè)計(jì)【不具體分析各場景操禀,可參考計(jì)算機(jī)系統(tǒng) 核心概念及軟硬件實(shí)現(xiàn)】。

我們的編碼實(shí)現(xiàn)是什么含義呢横腿?

  1. enter1 = TRUE表示進(jìn)程1準(zhǔn)備進(jìn)入臨界區(qū)颓屑,enter1 = FALSE;turn = 2表示進(jìn)程1離開臨界區(qū)耿焊,進(jìn)程2可以進(jìn)去臨界區(qū)揪惦。
  2. 進(jìn)程2在臨界區(qū)中時(shí),進(jìn)程1無法進(jìn)入臨界區(qū)(while (enter2 && (turn == 2))搀别。
  3. 進(jìn)程1執(zhí)行完畢臨界區(qū)代碼后丹擎,才允許進(jìn)程2進(jìn)入臨界區(qū)(turn = 2)尾抑。

基于上面的理解歇父,我們這樣理解Peterson算法:

  1. enter理解為蒂培,進(jìn)程有進(jìn)入臨界區(qū)的意圖(enter1 = TRUE表示進(jìn)程1有意圖進(jìn)入臨界區(qū));
  2. turn理解為榜苫,并發(fā)系統(tǒng)允許進(jìn)入臨界區(qū)的進(jìn)程(turn = 1表示并發(fā)控制系統(tǒng)判定進(jìn)程1可以進(jìn)入臨界區(qū))护戳;
  3. 進(jìn)程有進(jìn)入臨界區(qū)的意圖,并且垂睬,系統(tǒng)允許其進(jìn)入臨界區(qū)的進(jìn)程媳荒,才可以進(jìn)入臨界區(qū)(enter1 && (turn == 1));
  4. 對進(jìn)程1驹饺,如果互斥的進(jìn)程(進(jìn)程2)滿足上述第3點(diǎn)钳枕,那么進(jìn)程1循環(huán)等待,以禮讓進(jìn)程2先進(jìn)入臨界區(qū)(while (enter2 && (turn == 2); //nothing)赏壹。
  5. 進(jìn)程1是這樣禮讓進(jìn)程2的鱼炒,turn = 2,turn是可以理解為并發(fā)控制系統(tǒng)允許進(jìn)入臨界區(qū)的進(jìn)程蝌借。

最后昔瞧,比較我們編寫的實(shí)現(xiàn)方式和Peterson算法,我們編寫的方式雖然效果與Perterson算法相同菩佑,但有缺陷:

  1. 系統(tǒng)最初運(yùn)行時(shí)自晰,需要一個(gè)turn值,此turn值即并發(fā)系統(tǒng)允許運(yùn)行的第一個(gè)進(jìn)程(不具體分析場景)稍坯,此設(shè)計(jì)可以理解為硬編碼酬荞,人為干預(yù)并發(fā)系統(tǒng)調(diào)度,不好劣光;
  2. 進(jìn)程離開臨界區(qū)后修改turn值袜蚕,這個(gè)turn值決定了下一次進(jìn)程并發(fā)時(shí)哪一個(gè)進(jìn)程可以繼續(xù)執(zhí)行,這就導(dǎo)致了绢涡,并發(fā)調(diào)度結(jié)果取決于上一次并發(fā)執(zhí)行的順序牲剃,每次并發(fā)調(diào)度不是獨(dú)立的,不好雄可。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凿傅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子数苫,更是在濱河造成了極大的恐慌聪舒,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虐急,死亡現(xiàn)場離奇詭異箱残,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門被辑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來燎悍,“玉大人,你說我怎么就攤上這事盼理√干剑” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵宏怔,是天一觀的道長奏路。 經(jīng)常有香客問我,道長臊诊,這世上最難降的妖魔是什么鸽粉? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮抓艳,結(jié)果婚禮上潜叛,老公的妹妹穿的比我還像新娘。我一直安慰自己壶硅,他們只是感情好威兜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著庐椒,像睡著了一般椒舵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上约谈,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天笔宿,我揣著相機(jī)與錄音,去河邊找鬼棱诱。 笑死泼橘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迈勋。 我是一名探鬼主播炬灭,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼靡菇!你這毒婦竟也來了重归?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤厦凤,失蹤者是張志新(化名)和其女友劉穎鼻吮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體较鼓,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椎木,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片香椎。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡勇垛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出士鸥,到底是詐尸還是另有隱情,我是刑警寧澤谆级,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布烤礁,位于F島的核電站,受9級特大地震影響肥照,放射性物質(zhì)發(fā)生泄漏脚仔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一舆绎、第九天 我趴在偏房一處隱蔽的房頂上張望鲤脏。 院中可真熱鬧,春花似錦吕朵、人聲如沸猎醇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硫嘶。三九已至,卻和暖如春梧税,著一層夾襖步出監(jiān)牢的瞬間沦疾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工第队, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哮塞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓凳谦,卻偏偏與公主長得像忆畅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子尸执,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容