boost:: lock_guard vs boost:: mutex:: scoped_lock
c++11 future-proof (2)
¿Qué es preferred boost::lock_guard
o boost::mutex::scoped_lock
?
Estoy usando Boost.Thread con la esperanza de pasar a C ++ 11 threading cuando esté disponible.
¿ scoped_lock
es parte del próximo estándar de C ++?
¿Hay alguna ventaja para preferir uno sobre el otro?
NOTA : Soy consciente de que scoped_lock
es solo un typedef
de lock_guard
.
edit: estaba equivocado. scoped_lock
no es un typedef
de lock_guard
. Es un tipo de unique_lock
.
Amit tiene razón: boost::mutex::scoped_lock
es un typedef
para boost::unique_lock<boost::mutex>
, no lock_guard
. scoped_lock
no está disponible en C ++ 0x.
A menos que necesite la flexibilidad de unique_lock
, usaría lock_guard
. Es más simple y expresa más claramente la intención de limitar el bloqueo a un alcance definido.
No hay mucha diferencia entre los dos. Según Boost , scoped_lock
es un typedef para unique_lock<mutex>
. Tanto unique_lock
como lock_guard
implementan bloqueo de estilo RAII. La diferencia entre simplemente es que unique_lock
tiene una interfaz más compleja: permite diferir el bloqueo y desbloquear las llamadas.