码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-07-08 11:24:12      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:解决   存在   free   代码   article   场景   mod   线程   问题   

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

标签:解决   存在   free   代码   article   场景   mod   线程   问题   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!