std::mutex
是非递归的,违反它的是UB。所以理论上一切皆有可能(包括作为std::recursive_mutex
)),但 libc++似乎工作正常,这个程序输出
再见
#include <iostream>
#include <mutex>
std::mutex m;
int main() {
std::scoped_lock l1(m);
std::scoped_lock l2(m);
std::cout << "bye" << std::endl;
}
这是 libc++ 中的有意设计决定还是只是一些意外(例如,他们可以对互斥锁和递归互斥锁使用相同的逻辑)?
libstdc++ 挂起。
注意:我知道人们不应该依赖 UB,所以这不是关于最佳实践,我只是对晦涩的实现细节感到好奇。