最近开发过程中,经常遇到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的地址空间居然是无效的。。
1 回答
牧羊人nacy
TA贡献1862条经验 获得超7个赞
这个锁的方法我没用过,没法知道是不是你代码上的问题。。你试试我之前用过的一个方法吧,用的是关键段做的
#include <windows.h>
#include <process.h> // 忘了是哪个头文件了
CRITICAL_SECTION lock; // 锁的申明,在所有线程开始前
EnterCriticalSection(&lock); // 获取临界区锁
临界区动作
LeaveCriticalSection(&lock); // 释放临界区锁
DeleteCriticalSection(&lock); // 锁的销毁,在所有线程结束后
- 1 回答
- 0 关注
- 65 浏览
添加回答
举报
0/150
提交
取消