带 if 条件的作用域锁
Scoped lock with if condition
我想创建作用域锁,但我想要类似的东西:
{
if(lockRequired)
boost::mutex::scoped_lock(Mutex); //After this line we go out of scope
/* Here I also want to have Mutex */
}
如果条件为真,我想要锁定互斥锁但在升级范围内。我知道我可以使用简单的 .lock 并在范围末尾使用 .unlock 但我有很多 return 路径。我还可以在范围内创建一些 SynchronizationGuard 并且 whed 析构函数被称为 unlock mutex 但这不是干净的解决方案。一些建议?
此致。
使用三元运算符。
boost::mutex::scoped_lock lock = lockRequired ?
boost::mutex::scoped_lock(Mutex) : boost::mutex::scoped_lock();
或者在条件下使用swap
。
boost::mutex::scoped_lock lock;
if (lockRequired)
{
boost::mutex::scoped_lock lock_(Mutex);
lock.swap(lock_);
}
或者用defer_lock_t
构造锁然后调用lock
函数。
boost::mutex::scoped_lock lock(Mutex, boost::defer_lock);
if (lockRequired)
{
lock.lock();
}
你可以construct the lock deferred:
#include <boost/thread.hpp>
int main() {
boost::mutex mx;
boost::mutex::scoped_lock sl(mx, boost::defer_lock);
if (condition)
sl.lock();
// sl will unlock on end of scope
}
也适用于 std::unique_lock
、std::lock_guard
和相应的提升类型
类似的还有 adopt_lock
标签类型。
我想创建作用域锁,但我想要类似的东西:
{
if(lockRequired)
boost::mutex::scoped_lock(Mutex); //After this line we go out of scope
/* Here I also want to have Mutex */
}
如果条件为真,我想要锁定互斥锁但在升级范围内。我知道我可以使用简单的 .lock 并在范围末尾使用 .unlock 但我有很多 return 路径。我还可以在范围内创建一些 SynchronizationGuard 并且 whed 析构函数被称为 unlock mutex 但这不是干净的解决方案。一些建议?
此致。
使用三元运算符。
boost::mutex::scoped_lock lock = lockRequired ?
boost::mutex::scoped_lock(Mutex) : boost::mutex::scoped_lock();
或者在条件下使用swap
。
boost::mutex::scoped_lock lock;
if (lockRequired)
{
boost::mutex::scoped_lock lock_(Mutex);
lock.swap(lock_);
}
或者用defer_lock_t
构造锁然后调用lock
函数。
boost::mutex::scoped_lock lock(Mutex, boost::defer_lock);
if (lockRequired)
{
lock.lock();
}
你可以construct the lock deferred:
#include <boost/thread.hpp>
int main() {
boost::mutex mx;
boost::mutex::scoped_lock sl(mx, boost::defer_lock);
if (condition)
sl.lock();
// sl will unlock on end of scope
}
也适用于 std::unique_lock
、std::lock_guard
和相应的提升类型
类似的还有 adopt_lock
标签类型。