我有一个非常奇怪的情况,我无法解释。在代码中:
Env = Global.Queue2Ctrl.FIFO(100);//Wait for a msg for 100ms
if (Env == 0) continue; //Timeout
printf("i=%d %x\n",++i, (Env->Msg));
if (!Env->Msg)
BreakP();
....
就本期而言:其他线程每 100 毫秒从池中获取并填充 Env 结构(包括指向 Msg 的指针)。然后它通过 FIFO 发送 Env 指针。该线程处理 Env 并将其返回到池中。
在数十万个周期中,我会遇到断点 - 好吧,我知道如果我有一些我正在寻找的错误,可能是这样。恕我直言,当我在 gdb 中查看(不踩!)Env-Msg 变量时,它不是零!!!!Printf 打印零,我输入 if 子句,但 gdb 显示“正常”值。我可以在 5-7 分钟内重现这种情况,并且 gdb 总是显示出良好的价值?如果这是竞速条件,当两个线程都基于超时时,如何在一个汇编程序命令中完全做到这一点?