【发布时间】:2010-08-23 02:40:52
【问题描述】:
我听说递归互斥锁是 evil,但我想不出没有它的最佳方法。
class Object {
public:
bool check_stuff() {
lock l(m);
return /* some calculation */;
}
void do_something() {
lock l(m);
if (check_stuff()) {
/* ... */
}
/* ... */
}
private:
mutex m;
}
如果m 不是递归的,函数do_something() 将死锁,但有什么替代方法,除非我有两种方法来执行检查,其中一种不锁定。
正如上面的链接所暗示的那样,这种选择最终会使类更复杂,是否有不需要递归互斥锁的更简洁的解决方案?或者递归互斥体有时不是那邪恶的?
【问题讨论】:
标签: c++ thread-safety mutex