public member function
<mutex>

std::unique_lock::operator=

move (1)
unique_lock& operator= (unique_lock&& x) noexcept;
copy [deleted] (2)
unique_lock& operator= (const unique_lock&) = delete;
move (1)
unique_lock& operator= (unique_lock&& x);
copy [deleted] (2)
unique_lock& operator= (const unique_lock&) = delete;
Move-assign unique_lock
x 中的 互斥量对象 及其 持有状态 替换为当前对象管理的对象。

如果在调用前,对象 持有 其管理的 互斥量对象 的锁,则在其被替换前会调用其 unlock 成员函数。

x 将处于 默认构造(不引用任何 互斥量对象)后的状态。

unique_lock 对象不能被复制 (2)。

参数

x
另一个 unique_lock 对象。

返回值

*this

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// unique_lock::operator= example
#include <iostream>       // std::cout
#include <thread>         // std::thread
#include <mutex>          // std::mutex, std::unique_lock

std::mutex mtx;           // mutex for critical section

void print_fifty (char c) {
  std::unique_lock<std::mutex> lck;         // default-constructed
  lck = std::unique_lock<std::mutex>(mtx);  // move-assigned
  for (int i=0; i<50; ++i) { std::cout << c; }
  std::cout << '\n';
}

int main ()
{
  std::thread th1 (print_fifty,'*');
  std::thread th2 (print_fifty,'$');

  th1.join();
  th2.join();

  return 0;
}

可能的输出(行顺序可能不同,但字符绝不会混合)

**************************************************
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$


数据竞争

对象和 x 都会被修改。
调用前对象管理的 互斥量对象 可能会被修改(在 解锁 时,作为一个 原子操作,不会导致数据竞争)。
操作不会访问 x 管理的 互斥量对象(仅会传输)。

异常安全

无异常保证: 绝不抛出异常。
如果在调用前,对象 持有 其管理的 互斥量对象 的锁,而该互斥量对象由于某种原因当前未被调用线程锁定,则尝试 解锁 时会导致 未定义行为

否则,不抛出任何异常(no-throw guarantee)。

另见