[英]Mutex/Lock with scope/codeblock
I remember seeing it in some conference, but can't find any information on this. 我记得在某个会议上看到过它,但是找不到任何信息。
I want something like: 我想要类似的东西:
lock(_somelock)
{
if (_someBool)
return;
DoStuff();
} // Implicit unlock
Instead of: 代替:
lock(_somelock);
if (_someBool)
{
unlock(_somelock);
return;
}
DoStuff();
unlock(_somelock);
As you can see the code gets very bloated with multiple early returns. 如您所见,该代码变得非常肿,有多个早期回报。 Obviously one could make another function to handle locking/unlocking, but it's a lot nicer no?
显然,可以使另一个函数处理锁定/解锁,但这不是更好吗?
Possible with C++11 standard library? 可以使用C ++ 11标准库吗?
Yes, you can use a std::lock_guard to wrap a mutex. 是的,您可以使用std :: lock_guard包装互斥体。
{
std::lock_guard<std::mutex> lock(your_mutex);
if (_someBool)
return;
DoStuff();
}
The standard idiom is to use a guard object whose lifetime encompasses the locked state of the mutex: 标准习惯用法是使用一个保护对象,该对象的生命周期包含互斥体的锁定状态:
std::mutex m;
int shared_data;
// somewhere else
void foo()
{
int x = compute_something();
{
std::lock_guard<std::mutex> guard(m);
shared_data += x;
}
some_extra_work();
}
You can simply create an autolock of your own. 您可以简单地创建自己的自动锁。
Class AutoLock
{
pthread_mutex_t *mpLockObj;
AutoLock(pthread_mutex_t& mpLockObj)
{
mpLockObj = &mpLockObj;
pthread_mutex_lock(mpLockObj);
}
~AutoLock()
{
pthread_mutex_unlock(mpLockObj);
}
};
use like: 用途像:
#define LOCK(obj) AutoLock LocObj(obj);
int main()
{
pthread_mutex_t lock;
LOCK(lock);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.