如何在使用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超出范围
//做不挑剔的事
}

A
unique\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
和fire
unlock()
。不,但这似乎有效。我不知道如何使用{}