1

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

1 回答 1

3

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

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

于 2012-10-29T17:34:44.723 回答