【发布时间】:2014-12-23 18:50:00
【问题描述】:
根据this,unique_lock 可以通过声明std::unique_lock<std::recursive_mutex> 用于递归锁定,实际上编译良好。
但是,从检查代码(gcc 4.8.2 和 4.9.0)看来,unique_lock 并没有遵循 _Mutex.lock,而是实现了 lock 方法本身:
void
lock()
{
if (!_M_device)
__throw_system_error(int(errc::operation_not_permitted));
else if (_M_owns)
__throw_system_error(int(errc::resource_deadlock_would_occur));
else
{
_M_device->lock();
_M_owns = true;
}
显然,这可以防止互斥锁的递归锁定,实际上尝试递归锁定会引发resource_deadlock_would_occur 异常。
我在这里遗漏了什么,这是一个错误,还是 unique_lock 的文档有误?
TIA!!!
【问题讨论】:
标签: c++ multithreading locking recursive-mutex