当前位置:  开发笔记 > 编程语言 > 正文

析构函数应该是线程安全的吗?

如何解决《析构函数应该是线程安全的吗?》经验,为你挑选了1个好方法。

我正在浏览遗留代码并找到以下代码段:

MyClass::~MyClass()
{
   EnterCriticalSection(&cs);

//Access Data Members, **NO Global** members are being accessed here


  LeaveCriticalSection(&cs);
}

我想知道它有没有机会保护析构函数?

考虑一个场景:

1. Thread1 - About to execute any of the member function which uses critical section
2. Thread2-  About to execute destructor.

如果执行顺序是1 => 2那么它可能会起作用.但如果订单被撤销怎么办?

这是一个设计问题吗?



1> Mehrdad Afsh..:

在使用对象时不应调用析构函数.如果你正在处理这种情况,它需要一个基本的解决方案.然而,析构函数可能想要改变一些其他东西(与被破坏的类无关),并且它可能需要一个关键部分(例如,递减全局计数器).


尽管答案年代久远,但我不同意。如果成员变量已被另一个线程(而不是将调用dtor的线程)修改过,则必须应用同步。不过,它不必是“关键部分”。所需要的是,两个线程之间存在“ Synchronises-With”关系。这可能在两个线程中都需要适当的内存屏障-除非线程相同。
推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有