C++ 多线程 : Do I need mutex for constructor and destructor?

标签 c++ multithreading

对于将被多个线程访问的对象,我是否需要为其构造函数和析构函数设置互斥量?

我的猜测是我需要在析构函数中使用互斥量,因为有可能让一个线程访问该对象而另一个线程删除该对象。

另一方面,我想不出为什么我们需要在构造函数中使用互斥量的原因,因为在对象完全构造之前不能有其他线程访问该对象。

最佳答案

您无法在对象构造之前共享它。如果它不是共享的,那么只有一个线程使用它。结论 无需在构造函数中同步任何内容(除非您生成新线程)。

现在只有在所有强引用都结束其生命周期时才会调用析构函数。这意味着当执行析构函数时,最后一个强引用只是被清理。同样,这意味着只有一个线程正在使用对象,因此没有必要进行同步。

如果由于某种神奇的原因,您将在构造函数或析构函数中出现竞争条件,则错误必须在对象的所有者中。

我能想象的在析构函数中唯一有意义的同步是加入线程 future (由此对象产生)或履行 promise 。

关于C++ 多线程 : Do I need mutex for constructor and destructor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55164564/

相关文章:

c++ - Poco线程同步问题

c++ - 线程的意外输出

c++ - C C++ & 和 * 之间的区别

c++ - 有没有办法在不包含 stdafx.h 的情况下使用 VC++ 2010?

java - 无法将多个客户端添加到此 Java 聊天中

java - 可以创建一个由多个线程共享的 for 循环吗?

java - 在Jframe中添加循环

c++ - 在任务调度程序 C++ 中编辑现有任务

c++ - opencv cv::max 行为意外

c++ - 预编译 header 和 MSBuild