2010-02-16 16 views
36

Được ưu tiên boost::lock_guard hoặc boost::mutex::scoped_lock?boost :: lock_guard vs boost :: mutex :: scoped_lock

Tôi đang sử dụng Boost.Thread với hy vọng chuyển sang luồng C++ 11 khi có sẵn.

scoped_lock một phần của tiêu chuẩn C++ tiếp theo?

Có lợi thế nào để ưu tiên cái khác không?


LƯU Ý: Tôi biết rằng scoped_lock chỉ là một typedef của lock_guard.


sửa: Tôi đã sai scoped_lockkhông một typedef của lock_guard. Đó là số typedef trong số unique_lock.

Trả lời

28

Amit là đúng: boost::mutex::scoped_locktypedef cho boost::unique_lock<boost::mutex>, không phải lock_guard. scoped_lock không có sẵn trong C++ 0x.

Trừ khi bạn cần sự linh hoạt của unique_lock, tôi sẽ sử dụng lock_guard. Nó đơn giản hơn, và rõ ràng hơn thể hiện ý định hạn chế khóa đến một phạm vi được xác định.

24

Không có nhiều sự khác biệt giữa hai loại. Theo Boost, scoped_lock là typedef cho unique_lock<mutex>. Cả hai số unique_locklock_guard đều thực hiện khóa kiểu RAII. Sự khác biệt giữa đơn giản là unique_lock có giao diện phức tạp hơn - nó cho phép trì hoãn khóa và mở khóa cuộc gọi.