class temp
{
boost::mutex mx;
void CriticalCode() {
boost::mutex::scoped_lock scoped_lock(mx);
//Do Something
return;
}
}
如果此类分配在堆上 (
temp* T = new temp()
),这是否是线程安全的(对于每个实例,而不是所有实例一起)?如果我创建
boost::mutex mx
->boost::mutex* mx
,并在构造函数中分配它,那么它将分配在堆,代码也会是线程安全的吗?如果对 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/