旗語

2015-05-12 25 views
0

我有這個例子,我正試圖弄明白什麼樣的順序發言將運行,我相信這將是,X,A,B,Y旗語

我會是正確的條件同步這樣說。我的邏輯是語句X首先與A並行運行,但是當我們到達信號量時,它仍然爲0,因此我們允許語句B由於信號增量而運行。現在我們終於可以運行Y了? enter image description here

+2

想想這種情況。如果P1和P2在大致相同的時間初始化,則在進程P1執行任何操作之前,A可以在X之前運行,信號consyn和運行B.因此,ABXY以及AXYB,XABY,XAYB等都是可能的。無法知道它們的運行順序。 – lhoworko

+0

P1在合適的時間啓動P2(在'語句X'之後;你將有但如果你希望可以預測的話,你需要進一步的同步 – pedwards

回答

2

因爲進程並行運行,所以X和A的順序無法確定 - 我們可以將其表示爲(X | A) - 表示這兩者中的任何一個都被執行。

現在,該信號量:由於平行的過程,動作的順序再次是(等待(consyn)|信號(consyn),其中不同的結果

如果等待(consyn)首先執行和信號(consyn),則結果爲(X | A)(Y | B),P1和P2結束。如果順序相反並且信號量實現使用信號遞增其值並等待遞減,則結果是(X | A)(Y | B),其中P1和P2結束。 Y),(A,B)和(A,Y-瓜爾膠信號量的犧牲者)被保留下來。

+0

如果一個信號量的信號第一個出現,信號量將會有1個計數,並且下一個等待不會做任何等待,如果P1被鎖定,那絕對是致命的。 – gnasher729

+0

壞的過時的,固定的,關於實現的註釋。 – mpolednik

2

對於陳述的順序,你可以說很少。您有訂單X /等待/ Y.您有訂單A /信號/ B並且您有訂單信號/ Y.就是這樣。如果你對等待/信號不感興趣只是工具,那麼Y在A之後執行,這就是你所知道的。

在執行P1的第一條語句之前,P2可以完全運行到它的結尾。