为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
慕哥9229398 2023-03-03 14:10:22
最近开发过程中,经常遇到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); // 锁的销毁,在所有线程结束后


查看完整回答
反对 回复 2023-03-06
  • 1 回答
  • 0 关注
  • 65 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信