gpt4 book ai didi

c++ - 互斥作为类成员

转载 作者:可可西里 更新时间:2023-11-01 16:36:35 26 4
gpt4 key购买 nike

 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/

26 4 0