C++ 11標準定義unique_lock::unlock
として(30.4.2.2.2、Pを§1159)C++ 11標準でunique_lock :: unlock underspecifiedですか?
void unlock();
Effects: pm->unlock()
Postcondition: owns == false
Throws: system_error when an exception is required (30.2.2).
Error conditions:
— operation_not_permitted — if on entry owns is false.
を他のすべてのロック操作例外は、少なくとも2つの機会にスローされることを指定:
- ミューテックスは(
errc::operation_not_permitted
とsystem_error
をスロー) - ミューテックスが既にロックされている(
errc::operation_not_permitted
でsystem_error
をスロー)
無効なmutexの問題は明らかにunlock
でも可能ですが、標準ではロック問題のプログラムの動作のみを指定しています。それは標準の本当の誤りですか、私は何かを逃していますか?
私にはわかりません。 mutexが無効なときに 'unlock'を呼び出すことが"明らかに可能 "なのはなぜですか? 'unlock()'の効果が 'pm-> unlock()'であるため、未定義の動作を避けるために 'pm'をnullにすることはできず、' BasicLockable'' * pm'の規約を満たさなければならないしたがって、ロックは現在の実行エージェントによって所有されている必要があります。私が紛失している微妙なことはありますか? –