求大神指点为什么会崩溃,有什么方法能杜绝崩溃~

最近开发过程中,经常遇到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的地址空间居然是无效的。。

慕哥9229398
浏览 66回答 1
1回答

牧羊人nacy

这个锁的方法我没用过,没法知道是不是你代码上的问题。。你试试我之前用过的一个方法吧,用的是关键段做的#include <windows.h>#include <process.h> // 忘了是哪个头文件了CRITICAL_SECTION lock; // 锁的申明,在所有线程开始前EnterCriticalSection(&lock); // 获取临界区锁临界区动作LeaveCriticalSection(&lock); // 释放临界区锁DeleteCriticalSection(&lock); // 锁的销毁,在所有线程结束后
打开App,查看更多内容
随时随地看视频慕课网APP