Вот кодЕсли операция мьютекса бросает system_error для блокировки дважды?
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
p.s.
Код, указанный выше, из книги Бьярна Страуструпа - язык программирования на С ++, ошибка 42.3.1.2 mutex. Согласно книге, должен появиться системный_error. Этот вопрос о «неопределенном поведении» публикуется в 2012 году, даже до публикации книги.
Почему вы ожидаете 'system_error' быть выброшен? – juanchopanza
[Не вижу ничего здесь, когда вы бросаете исключения.] (Http://en.cppreference.com/w/cpp/thread/mutex) – user4581301
«Если блокировка вызывается потоком, который уже владеет мьютексом, поведение не определено: программа * может * тупиковая ситуация, или, если реализация может обнаружить тупик, может возникнуть условие ошибки resource_deadlock_would_occur. " – melak47