std::unique_lock
性病::独特[医]锁
Defined in header | | |
---|---|---|
template< class Mutex > class unique_lock; | | (since C++11) |
全班unique_lock
是一个通用互斥锁所有权包装器,允许延迟锁定、时间限制的锁定尝试、递归锁定、锁所有权的转移以及条件变量的使用。
全班unique_lock
是可移动的,但不能复制--它符合MoveConstructible
和MoveAssignable
但不是CopyConstructible
或CopyAssignable
...
全班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) |
---|
例
二次
#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) |
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。