public member function
<mutex>

std::unique_lock::release

mutex_type* release() noexcept;
释放互斥量
返回指向所管理互斥量对象的指针,并释放对其的所有权

调用后,unique_lock对象不再管理任何互斥量对象(即,它处于与默认构造相同的状态)。

请注意,此函数不锁定或解锁返回的互斥量对象

参数



返回值

调用前,由unique_lock管理的互斥量对象的指针。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// unique_lock::release example
#include <iostream>       // std::cout
#include <vector>         // std::vector
#include <thread>         // std::thread
#include <mutex>          // std::mutex, std::unique_lock

std::mutex mtx;
int count = 0;

void print_count_and_unlock (std::mutex* p_mtx) {
  std::cout << "count: " << count << '\n';
  p_mtx->unlock();
}

void task() {
  std::unique_lock<std::mutex> lck(mtx);
  ++count;
  print_count_and_unlock(lck.release());
}

int main ()
{
  std::vector<std::thread> threads;
  for (int i=0; i<10; ++i)
    threads.emplace_back(task);

  for (auto& x: threads) x.join();

  return 0;
}

输出

count: 1
count: 2
count: 3
count: 4
count: 5
count: 6
count: 7
count: 8
count: 9
count: 10


数据竞争

unique_lock”对象被修改。
所管理互斥量对象在此操作中不被访问(尽管会返回指向它的指针)。

异常安全

无异常保证: 绝不抛出异常。

另见