std::unique_lock 还提供了 try_lock() 方法,用于尝试加锁,如果锁不可用,则返回 false,如果锁成功获取,则返回 true。 代码语言:javascript 复制 std::unique_lock<std::mutex>lock(mutex,std::defer_lock);if(lock.try_lock()){// 锁成功获取,执行临界区代码lock.unlock();}else{// 锁不可用,执行其他...
std::unique_lock也会在析构的时候自动解锁,所以说,是std::lock_guard的功能超集。 看看std::unique_lock的构造函数,支持三种加锁模式: unique_lock( mutex_type& m, std::defer_lock_t t );//延迟加锁unique_lock( mutex_type& m, std::try_to_lock_t t );//尝试加锁unique_lock( mutex_type& ...
std::unique_lock也会在析构的时候自动解锁,所以说,是std::lock_guard的功能超集。 看看std::unique_lock的构造函数,支持三种加锁模式: unique_lock( mutex_type& m, std::defer_lock_t t );//延迟加锁unique_lock( mutex_type& m, std::try_to_lock_t t );//尝试加锁unique_lock( mutex_type& ...
try_lock 函数如果被调用时没有获得锁则直接返回 false。try_lock_for 函数接受一个时间范围,表示在这一段时间范围之内线程如果没有获得锁则被阻塞住,如果在此期间其他线程释放了锁,则该线程可以获得对互斥量的锁,如果超时(即在指定时间内还是没有获得锁),则返回 false。try_lock_until 函数则...