在C ++中,lock_guard
允许您使用锁时符合RAII要求。构造lock()
时,它将调用lock_guard
;一旦超出范围,则将其销毁时将调用unlock()
。
是否有可能收紧lock_guard
的范围,使其早日销毁,以避免将锁的保留时间超过必要的时间?
我不确定您的意思是什么,但您可以为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
}
A unique_lock
保护器可以代替lock_guard
使用。 unique_lock
为您提供与lock_guard
相同的RAII保证(构造lock_guard时调用lock()
,销毁时调用unlock()
),并公开lock()
和unlock()
以允许您锁定和解锁自己。
使用unique_lock
,您可以在关键路径之前输入lock()
,然后在关键路径之后输入unlock()
。>