将std::lock_guard与try_lock一起使用

Use std::lock_guard with try_lock

本文关键字:lock 一起 try guard std      更新时间:2023-10-16

有没有一种方法可以告诉std::lock_guard在获取互斥时调用try_lock而不是lock

我唯一能想到的方法是使用std::adopt_lock:

if (!_mutex.try_lock())
{
    // Handle failure and return from the function
}
std::lock_guard<my_mutex_class> lock(_mutex, std::adopt_lock);

对于我的问题,是否有一个内置的解决方案,而不是显式地获取锁,然后让lock_guard负责释放它?

lock_guard的一个基本设计不变量是它始终保持锁。这最小化了开销,因为它的析构函数可以无条件地调用unlock(),并且不必存储额外的状态。

如果您需要尝试锁定行为,请使用unique_lock:

std::unique_lock<std::mutex> lock(_mutex, std::try_to_lock);
if(!lock.owns_lock()){
    // mutex wasn't locked. Handle it.
}