C++多线程卡死问题--访问冲突未必崩溃
//上游调用到这里起线程 void DataCenter::start() { auto dataMap = getData(); vector<boost::thread> ths; for (const auto& item : dataMap ) { ths.push_back(boost::thread(boost::bind(&DataCenter::doCompose, this, item.second))); } for (vector<boost::thread>::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<string, map<string, vector<int64_t> > >& data) { //.... //因为这里没有加锁,偶发冲突,线程可能卡住了。 //并没有引起整个程序的崩溃,被误为处理得慢了。 WriteLock wLock(m_lockDataMap); m_dataMap[key] = dt; //.... }
结论
没有写程序单独验证。只是项目中遇到了,对一个公共成员m_dataMap加下写锁就好了。