0
我最近在測試中遇到了一個問題,基本上說這是爲了讓3個併發進程按順序執行一些代碼塊。競賽狀況在哪裏?
執行順序櫃面說沒有道理的例子:
P1 P2 P3 P1 P2 P3 ...
我的回答,我寫這個僞ISH代碼
shared s[2] = {-1,-1};
void Process1(){
while(1){
if(s[0] < 0 && s[1] < 0){
DO_CS;
s[0] = 1;
}
}
}
void Process2(){
while(1){
if(s[0] > 0 && s[1] < 0){
DO_CS;
s[1] = 1;
}
}
}
void Process3(){
int i = 0;
while(1){
if(s[1] > 0 && s[0] > 0){
DO_CS;
s[0] = -1;
s[1] = -1;
}
}
}
我的老師w死記硬背的競爭條件,並在Process3的if語句中圈出最後一行,並在process2中繪製了條件語句的箭頭。
我很難看到這可能會導致競爭條件。我相信這很明顯,但我無法看到它。
謝謝!
你現在明白了嗎? – Amit
是的,你的答案是有道理的。我忘記了,如果陳述不是一次全部評估。非常感謝您,我會將您的答案標記爲已接受。 @Amit – Danwakeem