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”物件被修改。
所管理互斥量物件在此操作中不被訪問(儘管會返回指向它的指標)。

異常安全

無異常保證: 絕不丟擲異常。

另見