Theo article này:Tại sao khóa std :: mutex hai lần 'Hành vi không xác định'?
Nếu bạn cố gắng và khóa một mutex không đệ quy hai lần từ cùng một sợi mà không cần mở khóa ở giữa, bạn sẽ có được hành vi không xác định.
Tâm trí ngây thơ của tôi cho tôi biết tại sao họ không trả lại lỗi? Có một lý do tại sao điều này đã được UB?
Bạn có thể muốn sử dụng atomic_flag với thứ tự bộ nhớ mặc định. Nó không có cuộc đua dữ liệu và không bao giờ ném ngoại lệ như mutex với nhiều cuộc gọi mở khóa (và hủy bỏ không kiểm soát được, tôi có thể thêm ...). Ngoài ra, có nguyên tử (ví dụ: nguyên tử [bool] hoặc nguyên tử [int] (với dấu ngoặc vuông, chứ không phải [])), có các hàm đẹp như tải và compare_exchange_strong. http://www.cplusplus.com/reference/atomic/atomic_flag/ http://www.cplusplus.com/reference/atomic/atomic/ – Andrew
Cũng như 'mutex' có thể được triển khai với macro gốc của hệ điều hành, sau đó nó làm cho tinh thần để không xác định những gì có thể khác nhau trên hệ điều hành khác nhau để 'std :: mutex' có thể là một wrapper mỏng xung quanh hệ điều hành cung cấp mutex. – Phil1970