Div*_*oML 3 c++ multithreading
对于将被多个线程访问的对象,我是否需要为其构造函数和析构函数提供互斥体?
我的猜测是我需要在析构函数中使用互斥体,因为可能有一个线程访问该对象,而另一个线程删除该对象。
另一方面,我想不出我们在构造函数中需要互斥体的原因,因为在完全构造对象之前不能有其他线程访问该对象。
在构造之前您无法共享对象。如果它不被共享,那么只有一个线程使用它。结论不需要在构造函数中同步任何内容(除非您生成一个新线程)。
现在,仅当所有强引用结束其生命周期时才会调用析构函数。这意味着当执行析构函数时,最后一个强引用只是被清理掉。同样,这意味着只有一个线程正在使用对象,因此没有同步的意义。
如果由于某种神奇的原因,您将在构造函数或析构函数中出现竞争条件,则错误必须位于对象的所有者中。
我能想象到的唯一同步在析构函数中有意义是加入线程 future(由该对象生成)或履行承诺。