Подтвердить что ты не робот

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.

4b9b3361

Ответ 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 имеет более сложный интерфейс - он позволяет отложить блокировку и разблокировать вызов.