在线文档教程
C++
线程支持 | Thread support

std::unique_lock

性病::独特[医]锁

Defined in header
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

成员类型

TypeDefinition
mutex_typeMutex

成员函数

(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。

http://en.cppreference.com/w/cpp/线程/UNIQUE[医]锁