2

这是代码

mutex mtx;
try{
    mtx.lock();
    mtx.lock();
}catch(system_error& e){
    mtx.unlock();
    cout << e.what() << '\n';
    cout << e.code() << '\n';
}

device or resource busy, generic: 16预期有输出,但从未见过。

gcc 版本 4.8.4

ps

上面的代码来自 Bjarne Stroustrup 的书——C++ 编程语言,42.3.1.2 mutex Error。根据这本书,应该出现一个system_error。这个关于“未定义行为”的问题是在 2012 年发布的,甚至在这本书出版之前。

4

1 回答 1

3

这是未定义的行为。如果我们查看 [mutex.requirements.mutex],它具有调用线程不拥有互斥锁的先决条件,以及调用线程确实拥有互斥锁的后置条件。device_or_resource_busy与另一个调用线程尝试锁定互斥锁有关。但是,是否resource_deadlock_would_occur抛出它是实现定义的。

这个问题与为什么要锁定 std::mutex 两次“未定义行为”重复?

于 2015-09-07T17:05:55.127 回答