Re: [理工] OS process synchronization

看板Grad-ProbAsk作者時間14年前 (2011/11/30 00:38), 編輯推噓3(301)
留言4則, 3人參與, 最新討論串2/3 (看更多)
※ 引述《TNC (code)》之銘言: : consider the following program : boolean block[2]; : int turn; : void p(int id){ : while(true) : blocked[id]=true; : while(trun!=id){ : while(blocked[1-id]) do noop; : turn = id; : } : /*critical section*/ : block[id] = false; : /*remainder section*/ : } : } : void main() : { : blocked[0]=false; : blocked[1]=false; : turn = 0; : parbegin(p(0),p(1)); : } : is mutual exclusion satisfied?! progress成立,但mutual exclusion跟bounded waiting都不成立。 mutual exclusion在此情況下不成立: 假設現在turn = 1 但是process 1只剛進while(true) loop, 卻還沒把自己的block設成true,cpu就被process 0搶走了。 此時block[1] = false。 然後process 0很順利的進到while(turn != 0)的loop中, 並且剛驗證完block[1] = false離開bust waiting的while loop, 在還沒把turn改成自己之前,process 1搶到cpu,此時turn依然為1。 於是process 1不會進while(turn != 1)的loop裡面就進去critical section了。 接著process 0又搶回cpu,然後把turn改成自己,順利的離開while loop, 也就又進到critical section中了。 progress成立: 因為 1.不想進去的人不會把自己改成true,另一個就不會被卡住。 2.有turn的人一定可以直接進去,不會有deadlock。 bounded waiting不成立: 情境同mutual exclusion時,只是改成一個在CS中一個在busy waiting中。 離開的那一個剛把自己改成flase時,另一個搶cpu到離開busy waiting。 然後另一個又搶到cpu因為自己有turn所以可以直接再進去CS。 : 我想問的是parbegin是什麼意思?! : 是說直接從程式的某個部分開始跑嗎? 就是並行無誤。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.24.157.177

11/30 00:51, , 1F
11/30 00:51, 1F

11/30 01:13, , 2F
11/30 01:13, 2F

11/30 01:13, , 3F
想得很仔細!!
11/30 01:13, 3F

11/30 09:45, , 4F
原來如此,我想太少了
11/30 09:45, 4F
文章代碼(AID): #1ErGg1q- (Grad-ProbAsk)
文章代碼(AID): #1ErGg1q- (Grad-ProbAsk)