关于map的问题。

chenbin0522 2012-12-27 10:05:36

我使用map来存储一些信息。由于多线程访问这个map,添加或删除map中的内容,所以加个了锁, 可是由于多线程操作,在删除map中的某个节点的时候,可能这个节点内容已经在别的线程中使用,造成程序出现错误。如何来避免这个问题?
...全文
159 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
oniisama 2012-12-27
  • 打赏
  • 举报
回复
shared_ptr
chenbin0522 2012-12-27
  • 打赏
  • 举报
回复
引用 5 楼 vipjeffreylee 的回复:
删除动作,一直等待锁释放,一旦释放,就执行删除操作
这样的话,其它线程已经得到节点指针了,那还是会出现问题呀。
vipjeffreylee 2012-12-27
  • 打赏
  • 举报
回复
删除动作,一直等待锁释放,一旦释放,就执行删除操作
chenbin0522 2012-12-27
  • 打赏
  • 举报
回复
引用 2 楼 liulcsy 的回复:
引用 楼主 chenbin0522 的回复:我使用map来存储一些信息。由于多线程访问这个map,添加或删除map中的内容,所以加个了锁, 可是由于多线程操作,在删除map中的某个节点的时候,可能这个节点内容已经在别的线程中使用,造成程序出现错误。如何来避免这个问题? 很简单的使用一个信号量即可。
求详细说明。。。
zilaishuichina 2012-12-27
  • 打赏
  • 举报
回复
用智能指针就可以了 程序中没有对该对象的引用的时候 智能指针自动删除该对象
科比布莱恩特 2012-12-27
  • 打赏
  • 举报
回复
引用 楼主 chenbin0522 的回复:
我使用map来存储一些信息。由于多线程访问这个map,添加或删除map中的内容,所以加个了锁, 可是由于多线程操作,在删除map中的某个节点的时候,可能这个节点内容已经在别的线程中使用,造成程序出现错误。如何来避免这个问题?
很简单的使用一个信号量即可。
lilianjie001 2012-12-27
  • 打赏
  • 举报
回复
根据键值判断该节点是否存在,如果存在则删除,不存在就不用做删除操作。
FancyMouse 2012-12-27
  • 打赏
  • 举报
回复
拿写锁的时候怎么可能会有其他线程拿读锁。出现这种情况肯定是锁错了。 节点指针就像迭代器一样,得定义让它失效。线程如果要读数据自己拷一份拷贝然后再用。
heartlesstoanyone 2012-12-27
  • 打赏
  • 举报
回复
使用引用计数

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧