2012-10-29 6 views
1

static int 변수를 플래그로 선언하고, 한 번만 호출되는 init()에서 -1로 초기화 한 다음 C 나중에 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 또는 1의 호출 코드 –

+0

을 게시하십시오. –

답변

3

각 프로세스는 moveForward를 한 번만 호출합니다. 프로세스는 정적 데이터를 공유하지 않습니다!

스레드를 사용하거나 공유 메모리를 사용하십시오. 또한 공유 데이터의 동시 액세스에는 뮤텍스 또는 세마포어를 사용하십시오. 가급적 병렬 평행에 더 적합한 언어로 전환하십시오 ...

+0

많은 의미가 있습니다. 덕분에, –

+0

! 예, 우리는 세마포어를 사용해야합니다. 그러나 상태가 다를 때만 플래그를 유지하려고 했으므로 필요할 때를 볼 수 있습니다. 하하. 나는 다른 해결책을 생각할 필요가 있다고 생각한다. 고마워요! =] –

관련 문제