调试了3天的内存错误。最后发现是,多线程队列操作产生的。
while(true)
{
if(queue.empty())
continue;
queue.pop(elem);
}
出队列与判断队列为空内部都加了锁,是线程安全的。但是判空和出队列之间没有加锁。这个之间队列有可能为空。导致elem没有值。
而这段程序没有判断pop()的返回值,pop()参数使用的是引用,elem初始化是没有置空。导致后续调试很难发现问题。
调试了3天的内存错误。最后发现是,多线程队列操作产生的。
while(true)
{
if(queue.empty())
continue;
queue.pop(elem);
}
出队列与判断队列为空内部都加了锁,是线程安全的。但是判空和出队列之间没有加锁。这个之间队列有可能为空。导致elem没有值。
而这段程序没有判断pop()的返回值,pop()参数使用的是引用,elem初始化是没有置空。导致后续调试很难发现问题。
4362

被折叠的 条评论
为什么被折叠?