概述
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非线程安全及多线程解决办法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复