加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 销毁对象时的运行方法

发布时间:2020-12-16 10:20:07 所属栏目:百科 来源:网络整理
导读:几天前,我的朋友告诉我他们的项目情况. 有人决定,在并行线程(如异步)中销毁NotVerySafeClass的对象会很好.它是在不久前实施的. 现在它们崩溃了,因为在主线程中调用了一些方法,而对象被销毁了. 创建了一些解决方法来处理这种情况. 当然,这只是一个不太好的解
几天前,我的朋友告诉我他们的项目情况.
有人决定,在并行线程(如异步)中销毁NotVerySafeClass的对象会很好.它是在不久前实施的.
现在它们崩溃了,因为在主线程中调用了一些方法,而对象被销毁了.
创建了一些解决方法来处理这种情况.

当然,这只是一个不太好的解决方案的例子,但仍然是一个问题:

有没有办法在NotVerySafeClass内部阻止这种情况(如果已经调用了析构函数,则拒绝运行方法,并强制析构函数等待,直到任何正在运行的方法结束(假设只有一种方法))?

解决方法

不,不,不.这是一个基本的设计问题,它在考虑多线程情况和一般竞争条件时表现出一种常见的误解.

有一件事情可能同样发生,这实际上表明你需要一个所有权概念:函数调用线程可以在对象被销毁后立即调用函数,因此不再有对象并尝试调用它上面的函数是UB,由于该对象不再存在,它也没有机会阻止dtor和成员函数之间的任何交互.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读