閱讀問題和代碼我也會說(A)。我假設這些流程在完成任務之前不能被搶佔。
它說的初始狀態是S0=1
S1=0
S2=0
,並從我們所知道的P1
和P2
將執行一次。
並行進程可能很複雜,但我試圖描述流程人們會以我想到的方式發現錯誤,沒關係,我也在這裏學習。
現在有幾種情況會根據進程的順序產生不同的結果。
P0 -> P1 -> P0 -> P2 -> P0 = Three times
P0 -> P1 -> P2 -> P0 = Twice
P0 -> P2 -> P1 -> P0 = Twice
這給了我們至少兩次的答案。
編輯:
所有這一切都等待阻塞的假設()下進行,而信號燈== 0和版本()設置信號燈= 1,否則該代碼將只是大多是精神錯亂。
如果進程可以在任何時候中斷,那麼事情會變得有趣。
P0 starts out running because S0=1 at start
P0 print '0';
P0 release(S1);
-- here S1 may take over or not --
P0 release(S2);
-- here S2 may take over or not --
P0 goes back to wait(S0)
-- here P0 continues or if S1 *and* S2 have not run blocks --
-- it may also be that only S1 or S2 ran and now the other will run --
現在我試圖找出一種方法來可視化事情如何解決,我沒有找到一種方法把它放在代碼塊中。
如果S1和S2都儘快運行,由於信號是二進制的,並且只能處於兩種狀態之一,P0只會運行兩次,但是如果調度足夠延遲S1或S2直到P0通過等待()再一次P0將運行三次。
但我認爲這個問題是不是意味着有中斷的過程,它只是變得混亂。
作業?你爲什麼不嘗試它? – podiluska
聽起來像是功課 – codeling
這不是家庭作業的人,這個問題是從2010年的大門我解決了它,這個問題的解決方案是(A),但我想知道P1和P2如何再次執行,因爲對於(A)他們應該,所以我正在採取另一種情況,我已經給出了上述.. – nirmitkansal