सी ++ 11 मानक परिभाषित करता है unique_lock::unlock
के रूप में (§ 30.4.2.2.2, पी 1159।)अद्वितीय_lock :: C++ 11 मानक में 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.
अन्य सभी ताला लगा संचालन निर्दिष्ट करते हैं कि एक अपवाद कम से कम दो अवसरों पर फेंक दिया जाता है:
- म्युटेक्स NULL (
system_error
errc::operation_not_permitted
साथ फेंकता) - म्युटेक्स पहले से ही बंद कर दिया है (
system_error
errc::operation_not_permitted
साथ फेंकता)
अमान्य म्यूटेक्स के साथ समस्या unlock
के लिए भी स्पष्ट रूप से संभव है, हालांकि मानक केवल लॉकिंग समस्याओं के लिए प्रोग्राम के व्यवहार को निर्दिष्ट करता है। क्या यह मानक में वास्तविक त्रुटि है या क्या मुझे कुछ याद आ रहा है?
मुझे यकीन नहीं है कि मैं अनुसरण करता हूं। म्यूटेक्स अमान्य होने पर 'अनलॉक' कहने के लिए यह "स्पष्ट रूप से संभव" क्यों है? आप अनुमान लगा सकते हैं कि 'अनलॉक() 'के प्रभाव के रूप में' pm-> अनलॉक() 'है, अपरिभाषित व्यवहार' pm 'से बचने के लिए शून्य नहीं होना चाहिए और' BasicLockable' 'pm' के लिए अनुबंध पूरा होना चाहिए , इसलिए ताला वर्तमान निष्पादन एजेंट के स्वामित्व में होना चाहिए। क्या कुछ सूक्ष्मता है जो मुझे याद आ रही है? –