Я собираюсь использовать 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() не "потоком достаточно безопасным"?