2012-10-18 27 views
6

Tôi đang thiếu rất nhiều từ tiêu chuẩn mới là lớp mẫu std::shared_lock. Trong Boost.Thread có boost::shared_lock, thậm chí boost::upgrade_lock tồn tại.Cách tạo shared_lock hoặc upgrade_lock trong tiêu chuẩn C++ 11?

Tại sao điều đó, không có tiêu chuẩn :: shared_lock và std::unique_lock trong C++ 11?
Làm cách nào để có được hành vi tương tự như boost::shared_lock, nhưng trong thuần túy C++ 11?

Tôi đã nghĩ đến việc sử dụng boost::shared_lock<std::mutex>, nhưng điều này không có nhiều ý nghĩa, vì std::mutex không có thành viên lock_shared(). Và ngoài ra, không có như std::shared_mutex.

+0

Nếu bạn đã sử dụng Boost, tôi nghĩ không có điểm nào tránh 'boost :: shared_mutex' có lợi cho' std :: mutex'. –

Trả lời

11

Đề xuất của Howard cho std::shared_mutex đã bị tắt cho C++ 11 do thiếu thời gian để xem xét chính xác. Anh ta đề xuất nó một lần nữa cho C++ 17, và nó đang được thảo luận tại cuộc họp ở Portland trong tuần này.

Đồng thời, nếu bạn có thể sử dụng Boost thì bạn cũng có thể; sẽ không có bất kỳ chức năng mới nào cho nó được chuẩn hóa.

Điều đó nói rằng, đáng để kiểm tra rằng việc sử dụng shared_mutex thực sự là lợi ích --- trong nhiều trường hợp, nó không mang lại hiệu suất được hy vọng vì sự tranh chấp trên bản thân mutex.

+0

Cảm ơn bạn đã trả lời Anthony. Kể từ đó, tôi đã tìm hiểu và thảo luận về đề xuất của Howard: http://permalink.gmane.org/gmane.comp.lib.boost.devel/211180 –