【问题标题】:C static variable not updatingC静态变量不更新
【发布时间】:2012-10-29 17:26:50
【问题描述】:

我的 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()函数的是什么?
  • 取决于状态,0 或 1。
  • 要么你调用 init 比你想象的要多,要么你用 -1 调用这个函数。调试器或调试打印会告诉你...
  • 您要么多次调用 init(),要么调用 moveForward(),参数为 -1。如果您不发布您的调用代码,我无法判断问题可能是什么。
  • 我在/* other code */ 块中闻到了= 而不是==

标签: c variables static


【解决方案1】:

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

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

【讨论】:

  • 这很有意义。
  • 谢谢,海德!是的,我们应该使用信号量,但只有当状态不同时,所以我试图保留一面旗帜,看看我什么时候需要......哈哈。我想我需要考虑一个不同的解决方案。多谢! =]
猜你喜欢
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 2018-09-15
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多