c++ - 互斥作为类成员

标签 c++ multithreading boost mutex

 class temp
 {
    boost::mutex mx;
    void CriticalCode() {
        boost::mutex::scoped_lock scoped_lock(mx); 
        //Do Something
        return;
    }
 }
  1. 如果此类分配在堆上 (temp* T = new temp()),这是否是线程安全的(对于每个实例,而不是所有实例一起)?

  2. 如果我创建 boost::mutex mx -> boost::mutex* mx,并在构造函数中分配它,那么它将分配在堆,代码也会是线程安全的吗?

  3. 如果对 1 和 2 的回答是否定的,我怎样才能使每个实例线程安全?

最佳答案

1)如果这个类分配在堆上 (temp* T = new temp()) ,这是否是线程安全的(对于每个实例,不是所有实例一起?

是的。由于 mx 不是该类的静态成员,因此该类的每​​个实例都会有一个锁。

2) 如果我创建 boost::mutex mx -> boost::mutex* mx ,并在构造函数中分配它,以便它将分配在堆上,代码是否也是线程安全的?

是的。但线程安全仅在每个实例的基础上。

3)如果现在回答 1 和 2,我怎样才能使每个实例线程安全?

答案是肯定的,所以你很好。

以防万一,其他人想知道如何使用一个锁使所有实例线程安全——您可以使 mx 成为该类的静态变量。

关于c++ - 互斥作为类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5947061/

相关文章:

c++ - constexpr 中的构建错误

c++ - 有没有办法用循环删除两个给定值?

c++ - Qt:大量独特的随机 quint64

c++ - 在 C++ 中使用线程调用具有多个参数的非静态函数

c++ - 仅接受字符串或算术的模板化函数

c++ - 遍历 uBlas 稀疏矩阵的非零元素

c++ - 输出文本文件的位置

java - 这段Java代码中的 `Thread`是什么?

java - 一个线程中的值不为 null,而另一线程中的值为 null

c++ - 如何指定 C++ 类的特定方法使用模板?