C++ 11 định nghĩa tiêu chuẩn unique_lock::unlock
như (§ 30.4.2.2.2, p 1159.)Là unique_lock :: mở khóa chưa được xác định trong tiêu chuẩn C++ 11?
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.
Tất cả các hoạt động khóa khác xác định rằng một ngoại lệ được ném trên ít nhất hai lần:
- mutex là NULL (ném
system_error
vớierrc::operation_not_permitted
) - mutex đã được khóa (ném
system_error
vớierrc::operation_not_permitted
)
Vấn đề với mutex không hợp lệ rõ ràng là có thể đối với unlock
cũng vậy, tuy nhiên, tiêu chuẩn chỉ định hành vi của chương trình chỉ cho các vấn đề về khóa. Nó là một lỗi thực sự trong tiêu chuẩn hay tôi thiếu một cái gì đó?
Tôi không chắc chắn tôi sẽ theo dõi. Tại sao nó "rõ ràng là có thể" cho 'mở khóa' được gọi khi mutex không hợp lệ? Bạn có thể suy ra rằng vì hiệu ứng của 'mở khóa()' là 'pm-> mở khóa()', để tránh hành vi không xác định 'pm' không được rỗng và hợp đồng cho' BasicLockable' '* pm' phải được đáp ứng , do đó, khóa phải được sở hữu bởi tác nhân thực thi hiện tại. Có một số tinh tế mà tôi đang thiếu? –