对于将被多个线程访问的对象,我是否需要为其构造函数和析构函数设置互斥量?
我的猜测是我需要在析构函数中使用互斥量,因为有可能让一个线程访问该对象而另一个线程删除该对象。
另一方面,我想不出为什么我们需要在构造函数中使用互斥量的原因,因为在对象完全构造之前不能有其他线程访问该对象。
最佳答案
您无法在对象构造之前共享它。如果它不是共享的,那么只有一个线程使用它。结论 无需在构造函数中同步任何内容(除非您生成新线程)。
现在只有在所有强引用都结束其生命周期时才会调用析构函数。这意味着当执行析构函数时,最后一个强引用只是被清理。同样,这意味着只有一个线程正在使用对象,因此没有必要进行同步。
如果由于某种神奇的原因,您将在构造函数或析构函数中出现竞争条件,则错误必须在对象的所有者中。
我能想象的在析构函数中唯一有意义的同步是加入线程 future (由此对象产生)或履行 promise 。
关于C++ 多线程 : Do I need mutex for constructor and destructor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55164564/