使用C ++ lock_guard时如何缩小范围?

问题描述 投票:1回答:2

在C ++中,lock_guard允许您使用锁时符合RAII要求。构造lock()时,它将调用lock_guard;一旦超出范围,则将其销毁时将调用unlock()

是否有可能收紧lock_guard的范围,使其早日销毁,以避免将锁的保留时间超过必要的时间?

c++ locking std mutex raii
2个回答
4
投票

我不确定您的意思是什么,但您可以为std::lock_guard的大括号引入一个块范围,如下所示:

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
}

0
投票

A unique_lock保护器可以代替lock_guard使用。 unique_lock为您提供与lock_guard相同的RAII保证(构造lock_guard时调用lock(),销毁时调用unlock()),并公开lock()unlock()以允许您锁定和解锁自己。

使用unique_lock,您可以在关键路径之前输入lock(),然后在关键路径之后输入unlock()。>

© www.soinside.com 2019 - 2024. All rights reserved.