Я собираюсь использовать boost::mutex
из boost/thread/mutex.hpp
.
Существует несколько способов блокировки/разблокировки мьютекса: с помощью scoped_lock
, unique_lock
, lock_guard
, функций-членов mutex ::lock()
и ::unlock()
и несимвольных функций lock()
и unlock()
.
Я заметил, что boost::scoped_mutex
является одним из самых популярных способов использования мьютекса. Почему предпочтительнее функции-члены ::lock()
и ::unlock()
?
В частности, почему я должен использовать
{
boost::scoped_lock lock(mutex)
// ...
// read/output sharing memory.
// ...
}
а не
mutex.lock()
// ...
// read/output sharing memory.
// ...
mutex.unlock()
является scoped_lock
лучше только из-за некоторой точки кодирования стиля или является ::lock()/::unlock()
не "потоком достаточно безопасным"?