如果我需要多线程安全类,我想知道这是一个好的设计。
1)将方法设计为普通的非线程安全类将拥有它们,如果它们不修改成员,请注意用 const 标记方法。Ofc 对此持保留态度,例如并发向量不能有 pop_back(),只有 try_pop() ...
2) 将可变互斥锁添加到类中,并在每个方法开始时使用 lock_guard every 锁定它(如果互斥锁是非递归的,请注意不要对互斥锁进行双重锁定)
例子:
size_t MyClass::getSize() const
{
lock_guard<mutex> lg(mtx); //mtx is mutable
return cont.size();
}