我有一些正在处理的队列代码。我试图使用全局 int 来跟踪队列的大小。
#define MAX 100
int size=0;
int gEnqueue=gDequeue=0;
int enqueue()
{
gEnqueue++;
if( size == MAX )
return QUEUE_FULL;
/* snip the actual queue handling */
size++;
return 0;
}
int dequeue()
{
gDequeue++;
if(!size)
return QUEUE_EMPTY;
/* snip actual queue handling */
if(size)
size--;
return 0;
}
当然还有更多的代码,但是太多了,无法发布。
发生的事情是大小卡在我设置的最大值。这两个函数都被调用了偶数次。如果我转储队列,我可以看到其中只有 3 个项目。
什么会导致这个问题?
编辑 #1:使代码示例与我实际编写的代码相匹配
这不是线程化的。
编辑 #2:我是个白痴,应该这样做而不是假设。 我错了,甚至调用了 enqueue() 和 dequeue()。
self 提醒,使用真实指标而不是猜测。
最佳答案
如果您不能使用调试器,我建议在两个函数中添加打印语句以显示大小相等,然后在运行程序后检查输出。通常在查看打印日志时问题很明显。
关于c - c 中的全局计数器未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1313485/