如何在使用C++;锁门? 在C++中, LogixGueGue/COD>允许使用锁时遵守RAII。它在构造lock\u-guard时调用lock(),在超出范围后销毁时调用unlock()
有没有可能收紧如何在使用C++;锁门? 在C++中, LogixGueGue/COD>允许使用锁时遵守RAII。它在构造lock\u-guard时调用lock(),在超出范围后销毁时调用unlock(),c++,locking,std,mutex,raii,C++,Locking,Std,Mutex,Raii,有没有可能收紧锁紧装置的作用域,使其更快地被破坏,以避免锁保持的时间过长?我不太清楚您的意思,但您可以为标准::锁紧装置引入一个块作用域,使用如下大括号: void foo() { // do uncritical stuff { // critical part starts here with construction std::lock_guard<std::mutex> myLock(someMutex);
锁紧装置的作用域,使其更快地被破坏,以避免锁保持的时间过长?我不太清楚您的意思,但您可以为标准::锁紧装置
引入一个块作用域,使用如下大括号:
void foo()
{
// do uncritical stuff
{
// critical part starts here with construction
std::lock_guard<std::mutex> myLock(someMutex);
// do critical stuff
} // critical parts end here with myLock going out of scope
// do uncritical stuff
}
void foo()
{
//做不挑剔的事
{
//关键部分从结构开始
std::lock_guard myLock(someMutex);
//做重要的事情
}//关键部件在此结束,myLock超出范围
//做不挑剔的事
}
Aunique\u lock
guard可以代替lock\u guard
unique\u lock
为您提供与lock\u guard
相同的RAII保证(在构建锁护时调用lock()
,在销毁时调用unlock()
),以及公开lock()
以允许您锁定和解锁自己
使用unique\u lock
可以在关键路径之前lock()
,在关键路径之后unlock()
unique\u lock
只有在先前获得锁的情况下才会调用析构函数中的unlock()
,因此不会有两次释放锁的风险(这会导致未定义的行为)。您是否尝试在希望锁处于活动状态的代码周围使用一组右括号。或者,也可以使用std::unique_lock
和fireunlock()
。不,但这似乎有效。我不知道如何使用{}