C静态变量不更新

C静态变量不更新,c,variables,static,C,Variables,Static,我的C代码有一个问题,我声明了一个静态int变量(作为一个标志),然后在init()中将其初始化为-1,这只调用了一次,然后当我稍后尝试将该值更新为0或1时,它会不断恢复为-1 有人知道问题是什么吗 我没有任何具有相同标识符的局部变量,所以我真的迷路了 谢谢 static int previousState; void init() { previousState = -1; } void moveForward(int currentState) { if (previous

我的C代码有一个问题,我声明了一个静态int变量(作为一个标志),然后在init()中将其初始化为-1,这只调用了一次,然后当我稍后尝试将该值更新为0或1时,它会不断恢复为-1

有人知道问题是什么吗

我没有任何具有相同标识符的局部变量,所以我真的迷路了

谢谢

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();
}

每个进程只调用一次moveForward。进程不共享静态数据


使用线程,或者使用共享内存。还可以使用互斥或信号量来并发访问共享数据。最好切换到更适合并行处理的语言…

传递给
moveForward()
函数的内容?根据状态,可以是0或1。或者调用init的次数比您想象的多,或者使用-1调用此函数。调试器或调试打印将告诉您…您正在多次调用
init()
,或者正在调用
moveForward()
,参数为
-1
。如果你不发布你的呼叫代码,我不知道问题出在哪里。我闻到的是
=
而不是
/*其他代码*/
块中的
=
,这很有意义。谢谢,海德!是的,我们应该使用信号灯,但只有在各州不同的时候,所以我试着保留一面旗子,看看我什么时候需要。。哈哈。我想我需要想出一个不同的解决方案。非常感谢!=]