2010-02-16 1 views
36

Какой из них boost::lock_guard или boost::mutex::scoped_lock?boost :: lock_guard vs boost :: mutex :: scoped_lock

Я использую Boost.Thread с надеждой переместиться на C++ 11, когда он станет доступным.

scoped_lock часть следующего стандарта C++?

Есть ли какие-либо преимущества, чтобы предпочесть один над другим?


ПРИМЕЧАНИЕ: Я знаю, что scoped_lock просто typedef из lock_guard.


редактировать: Я был неправ scoped_lock является неtypedef из lock_guard. Это typedefunique_lock.

ответ

28

Amit is right: boost::mutex::scoped_lock является typedef для boost::unique_lock<boost::mutex>, а не lock_guard. scoped_lock недоступен в C++ 0x.

Если вам не нужна гибкость unique_lock, я бы использовал lock_guard. Это проще и более четко выражает намерение ограничить блокировку определенной областью.

24

Не так много различий между ними. Согласно Boost, scoped_lock является typedef для unique_lock<mutex>. Оба из unique_lock и lock_guard реализуют блокировку в стиле RAII. Разница в том, что unique_lock имеет более сложный интерфейс - он позволяет отложить блокировку и разблокировать вызов.