boost :: lock_guard vs boost :: mutex :: scoped_lock - PullRequest
37 голосов
/ 17 февраля 2010

Что предпочтительнее boost::lock_guard или boost::mutex::scoped_lock?

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

Является ли scoped_lock частью следующего стандарта c ++?

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


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


изменить: я был не прав scoped_lock это не а typedef из lock_guard. Это typedef из unique_lock.

Ответы [ 2 ]

29 голосов
/ 26 февраля 2010

Амит прав: boost::mutex::scoped_lock - это typedef для boost::unique_lock<boost::mutex>, а не lock_guard. scoped_lock недоступно в C ++ 0x.

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

26 голосов
/ 17 февраля 2010

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

...