最近开发过程中,经常遇到find容器元素时程序崩溃,在做容器的insert和erase和find的所有接口中,我都提前使用了unique_lock把线程锁住,但是依然没有效果,程序还是崩溃在对容器的访问上,我想问有什么能绝对杜绝这种多线程操作容器所带来的崩溃吗,我只想到了锁。
大概如下:
{
std::unique_lock<std::mutex> lk(m_mutex);
auto it = std::find(m_socklistclient.begin(),m_socklisetclient.end(),sock);//调试崩溃在此
然后代码做插入操作
}
//还有相同的接口完成的是删除的操作功能
其中m_mutex和m_socklisetclient都是成员变量,
多线程操作不同的对象,互相之间的成员变量没有影响。
还有就是 如果手动的解锁lk.unlock();会不会使m_mutex空间释放,在一次这样的崩溃中我检测到m_mutex的地址空间居然是无效的。。
牧羊人nacy
相关分类