【发布时间】:2017-12-04 16:29:57
【问题描述】:
我正在研究std::lock 函数的可能实现,偶然发现了an implementation posted on the code review community。
引用已接受的答案(强调我的):
不,这不符合 std::lock() 的定义。
它 (std::lock) 保证无论您指定什么顺序 锁定参数列表不会陷入死锁 情况。
[...]
这也意味着如果列表中的一个锁已经被锁定,它必须 被释放,以便以正确的顺序获取锁。
无论最后一个陈述是否正确,我都找不到一个确定的答案。
我的问题:是否允许(即定义的行为)将调用线程拥有的锁定资源作为参数传递给标准 std::lock 函数?
std::mutex m1, m2;
m1.lock();
std::lock(m1, m2);
我的直觉告诉我这实际上是不允许的。该函数需要两个或更多 Lockable 对象,并且无法检查 Lockable 对象是否已被当前执行线程锁定。所以用这种方式实现std::lock 似乎是不可能的。
【问题讨论】:
标签: c++ multithreading