Lưu ý: Câu hỏi này liên quan đến C++ 11. Câu trả lời cho cùng một câu hỏi trong C++ 17 (hoặc các phiên bản mới hơn) có thể đã thay đổi. Để biết chi tiết:Cách tốt nhất để khóa nhiều std :: mutex'es là gì?
Khi chúng ta muốn khóa nhiều std::mutex
'es, chúng tôi sử dụng std::lock()
. Nhưng std::lock()
không cung cấp tính năng RAII.
Khi chúng tôi muốn khóa std::mutex
theo cách của RAII, chúng tôi sử dụng std::lock_guard
. Nhưng std::lock_guard
không thể khóa nhiều an toàn std::mutex
'.
Có cách nào để tận dụng lợi thế của cả hai phương pháp, để khóa nhiều cách std::mutex
'theo cách RAII?
+1 Và 'std :: lock' không giới hạn chỉ hai khóa. Nó có thể xử lý bất kỳ số nào (lên đến giới hạn trình biên dịch trên các mẫu variadic). –
Đã có những lo ngại về hiệu quả của 'std :: lock'. Xem câu trả lời này: http://stackoverflow.com/a/14525010/576911 để giải quyết những mối quan tâm đó. –