2010-02-16 15 views
36

¿Cuál es el preferido boost::lock_guard o boost::mutex::scoped_lock?boost :: lock_guard vs boost :: mutex :: scoped_lock

Estoy usando Boost.Thread con la esperanza de pasar a C++ 11 threading cuando esté disponible.

¿Es scoped_lock parte del próximo estándar de C++?

¿Las ventajas son preferir una sobre la otra?


NOTA: No soy consciente de que es sólo una scoped_locktypedef de lock_guard.


editar: Me equivoqué scoped_lock es no un typedef de lock_guard. Es un typedef de unique_lock.

Respuesta

28

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.

24

No hay mucha diferencia entre los dos. Según Boost, scoped_lock es un typedef para unique_lock<mutex>. Ambos, unique_lock y 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.