栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++多线程卡死问题--访问冲突未必崩溃

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++多线程卡死问题--访问冲突未必崩溃

//上游调用到这里起线程
void DataCenter::start()
{
	auto dataMap = getData();
	vector ths;
	for (const auto& item : dataMap )
	{
	   ths.push_back(boost::thread(boost::bind(&DataCenter::doCompose, this, item.second)));
	}
	for (vector::iterator it=ths.begin();it!=ths.end() ; ++it)
	{
	   if (it->joinable())
	   {
	       it->join(); //doCompose里面访问map冲突卡住还是这么的,这里一直等待...
	   }
	}
	
	//boost::thread_group group;
	//for (const auto& item : dataMap )
	//{
	//    group.create_thread(boost::bind(&DataCenter::doCompose, this, item.second));
	//}
	//group.join_all();
}

//200多行的大方法,有节省
void DataCenter::doCompose(const map > >& data)
{
   //....
   //因为这里没有加锁,偶发冲突,线程可能卡住了。
   //并没有引起整个程序的崩溃,被误为处理得慢了。   
   WriteLock wLock(m_lockDataMap);
   m_dataMap[key] = dt;
   //....                  
}
结论

没有写程序单独验证。只是项目中遇到了,对一个公共成员m_dataMap加下写锁就好了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/767636.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号