首页 > 编程语言 > 详细

queue非线程安全及多线程解决的方法

时间:2017-07-08 10:49:11      阅读:293      评论:0      收藏:0      [点我收藏+]

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非线程安全及多线程解决的方法

原文:http://www.cnblogs.com/ljbguanli/p/7135865.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!