stl的queue是非线程安全的
比如下面的应用场景:
子线程对queue队列做push操作,同时主线程对queue执行pop操作,则可能会发生异常。
解决办法:
方案1:
自己写一个循环队列,则不存在同时push与pop的问题。
方案2:
加一个全局互斥锁,核心代码如下:
#define LOCK_G_MSGQUEUE()
while(g_free_lock == true)
{
usleep(10*1000);
}
g_free_lock = true;
#define UNLOCK_G_MSGQUEUE()
g_free_lock = false;
在push和pop前调用
LOCK_G_MSGQUEUE();在push和pop后调用
UNLOCK_G_MSGQUEUE();
最后
以上就是落寞天空最近收集整理的关于queue非线程安全及多线程解决办法的全部内容,更多相关queue非线程安全及多线程解决办法内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复