boost::lock_guard vs boost::mutex::scoped_lock
Asked Answered
E

2

37

Which is preferred boost::lock_guard or boost::mutex::scoped_lock?

I'm using Boost.Thread with the hope to move to C++11 threading when it becomes available.

Is scoped_lock part of the next c++ standard?

Are the any advantages to prefer one over the other?


NOTE: I'm aware that scoped_lock is just a typedef of lock_guard.


edit: I was wrong scoped_lock is not a typedef of lock_guard. It's a typedef of unique_lock.

Expediency answered 16/2, 2010 at 22:19 Comment(0)
M
30

Amit is right: boost::mutex::scoped_lock is a typedef for boost::unique_lock<boost::mutex>, not lock_guard. scoped_lock is not available in C++0x.

Unless you need the flexibility of unique_lock, I would use lock_guard. It is simpler, and more clearly expresses the intent to limit the lock to a defined scope.

Magdaleno answered 26/2, 2010 at 16:21 Comment(1)
I have a question regarding this: afaik while in the scope_lock, any call to shared_lock will be blocked. Is this the same for lock_guard?Fulbert
P
27

Not much difference between the two. As per Boost, scoped_lock is a typedef for unique_lock<mutex>. Both of unique_lock and lock_guard implement RAII-style locking. The difference between is simply that unique_lock has a more complex interface -- it allows to defer lock and call unlock.

Peers answered 17/2, 2010 at 16:35 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.