【发布时间】:2011-08-22 06:26:59
【问题描述】:
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 的回答是否定的,我怎样才能使每个实例线程安全?
【问题讨论】:
-
当人们可以谈论“自动”和“动态”分配时,为什么还要谈论“堆栈”和“堆”。
-
关于第 2 点,完全没有必要这样做。使其成为指针的唯一原因(即使那样,我也会将其设为引用)是在构造过程中将互斥锁传递给实例 - 即您有一个希望所有实例都使用的互斥锁。
标签: c++ multithreading boost mutex