2012-10-29 80 views
1

我遇到了一個問題,我的C代碼中聲明瞭一個靜態變量(作爲標誌),然後在init()中初始化爲-1,只調用一次,然後當我嘗試稍後將值更新爲0或1,它會一直恢復爲-1。C靜態變量不更新

有誰知道這個問題可能是什麼?

我沒有任何具有相同標識符的本地變量,所以我真的迷路了。

謝謝!

static int previousState; 

void init() 
{ 
    previousState = -1; 
} 

void moveForward(int currentState) 
{ 
    if (previousState == -1) 
     previousState = currentState; 

    if (previousState != currentState) 
    { 
     /* do stuff */ 
     /* PROBLEM: it never goes into here, because previousState is always -1! */ 
    } 

    /* other code */ 
} 

void main() 
{ 
    init(); 

    if (fork() == 0) 
    { 
     /* do stuff */ 
     moveForward(1); 
     exit(); 
    } 

    /* more forks */ 

    moveForward(0); 
    exit(); 
} 
+0

傳遞給'moveForward()'函數的是什麼? –

+2

請根據狀態發佈調用代碼 –

+0

,要麼是0,要麼是1. –

回答

3

每個進程只調用一次moveForward。進程不共享靜態數據!

使用線程或使用共享內存。同時使用互斥或​​信號量來併發訪問共享數據。最好切換到更適合並行檢索的語言......

+0

這會很有意義。 –

+0

謝謝,海德!是的,我們應該使用信號量,但只有當狀態不同時,我才試圖保持一面旗子,看看我什麼時候需要一個..哈哈。我想我需要考慮一個不同的解決方案。非常感謝! =] –