Boost:: lock_guard vs boost:: mutex:: scoped_lock
Что предпочтительнее boost::lock_guard
или boost::mutex::scoped_lock
?
Я использую Boost.Thread с надеждой перейти на потоки С++ 11, когда он станет доступным.
Является ли scoped_lock
частью следующего стандарта С++?
Есть ли какие-либо преимущества, чтобы предпочесть один над другим?
ПРИМЕЧАНИЕ. Я знаю, что scoped_lock
- это всего лишь typedef
из lock_guard
.
edit: Я ошибался scoped_lock
не a typedef
of lock_guard
. Это a typedef
of unique_lock
.
Ответы
Ответ 1
Амит прав: boost::mutex::scoped_lock
является typedef
для boost::unique_lock<boost::mutex>
, а не lock_guard
. scoped_lock
недоступен в С++ 0x.
Если вам не нужна гибкость unique_lock
, я бы использовал lock_guard
. Это проще и более четко выражает намерение ограничить блокировку определенной областью.
Ответ 2
Не так много различий между ними. Согласно Boost, scoped_lock
является typedef для unique_lock<mutex>
. Оба unique_lock
и lock_guard
реализуют блокировку в стиле RAII. Разница в том, что unique_lock
имеет более сложный интерфейс - он позволяет отложить блокировку и разблокировать вызов.