2
下面是代碼互斥鎖操作是否應該拋出一個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.
上面的代碼來自Bjarne Stroustrup的書--C++編程語言42.3.1.2互斥錯誤。根據這本書,應該出現一個system_error。關於「未定義行爲」的問題發佈於2012年,甚至在本書出版之前。
重複你爲什麼想到要拋出'system_error'? – juanchopanza
[在這裏沒有關於拋出異常的東西](http://en.cppreference.com/w/cpp/thread/mutex) – user4581301
「如果鎖被一個已經擁有互斥鎖的線程調用,未定義:程序*可能*死鎖,或者,如果實現可以檢測到死鎖,則可能會拋出resource_deadlock_would_occur錯誤條件。「 – melak47