首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std::unique_lock

Defined in header <mutex>

?

?

template< class Mutex > class unique_lock;

?

(since C++11)

全班unique_lock是一个通用互斥锁所有权包装器,允许延迟锁定、时间限制的锁定尝试、递归锁定、锁所有权的转移以及条件变量的使用。

全班unique_lock是可移动的,但不能复制--它符合MoveConstructibleMoveAssignable但不是CopyConstructibleCopyAssignable...

全班unique_lock遇到BasicLockable所需经费。如果互斥遇到Lockable所需经费,unique_lock也会遇到Lockable要求%28ex:可用于std::lock%29;如果互斥遇到TimedLockable所需经费,unique_lock也会遇到TimedLockable所需经费。

模板参数

Mutex

-

the type of the mutex to lock. The type must meet the BasicLockable requirements

成员类型

Type

Definition

mutex_type

Mutex

成员函数

(constructor)

constructs a unique_lock, optionally locking the supplied mutex (public member function)

(destructor)

unlocks the associated mutex, if owned (public member function)

operator=

unlocks the mutex, if owned, and acquires ownership of another (public member function)

锁紧

锁锁关联的互斥体%28公共成员函数%29

试一试[医]锁试图锁定关联的互斥锁,如果互斥锁不可用,则返回%28公共成员函数%29。

试一试[医]锁[医]对于试图锁定关联的TimedLocable互斥锁,如果在指定的时间内互斥不可用,则返回%28公共成员函数%29。

试一试[医]锁[医]在试图锁定关联的TimedLocablemutex之前,如果互斥对象在达到指定时间点之前不可用,则返回指定的28公共成员函数%29。

解锁相关互斥锁%28公共成员函数%29

修饰符

与另一个STD::UNIQUE交换交换状态[医]锁定%28公共成员功能%29

释放关联的互斥锁而不解锁它%28公共成员函数%29

观察员

互斥锁返回指向关联的互斥量%28公共成员函数%29的指针。

拥有[医]锁测试锁是否拥有其关联的互斥量%28公共成员函数%29

运算符bool测试锁是否拥有其关联的互斥体%28公共成员函数%29。

非会员职能

std::swap(std::unique_lock) (C++11)

specialization of std::swap for unique_lock (function template)

二次

代码语言:javascript
复制
#include <mutex>
#include <thread>
#include <chrono>
 
struct Box {
    explicit Box(int num) : num_things{num} {}
 
    int num_things;
    std::mutex m;
};
 
void transfer(Box &from, Box &to, int num)
{
    // don't actually take the locks yet
    std::unique_lock<std::mutex> lock1(from.m, std::defer_lock);
    std::unique_lock<std::mutex> lock2(to.m, std::defer_lock);
 
    // lock both unique_locks without deadlock
    std::lock(lock1, lock2);
 
    from.num_things -= num;
    to.num_things += num;
 
    // 'from.m' and 'to.m' mutexes unlocked in 'unique_lock' dtors
}
 
int main()
{
    Box acc1(100);
    Box acc2(50);
 
    std::thread t1(transfer, std::ref(acc1), std::ref(acc2), 10);
    std::thread t2(transfer, std::ref(acc2), std::ref(acc1), 5);
 
    t1.join();
    t2.join();
}

二次

另见

lock_guard (C++11)

implements a strictly scope-based mutex ownership wrapper (class template)

scoped_lock (C++17)

deadlock-avoiding RAII wrapper for multiple mutexes (class template)

代码语言:txt
复制
 ? cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com