互斥体作为类成员

shd*_*shd 9 c++ multithreading boost mutex

 class temp
 {
    boost::mutex mx;
    void CriticalCode() {
        boost::mutex::scoped_lock scoped_lock(mx); 
        //Do Something
        return;
    }
 }
Run Code Online (Sandbox Code Playgroud)
  1. 如果在heap(temp* T = new temp())上分配了这个类,那么这是否是线程安全的(对于每个实例,并非所有实例一起)?

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

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

Aat*_*man 8

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

是.由于mx不是类的静态成员,因此每个类的实例将有一个锁.

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

是.但是线程安全只能基于每个实例.

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

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

如果有人想知道如何使用一个锁使所有实例的线程安全 - 你可以使mx成为类的静态变量.