public member function
<mutex>

std::unique_lock::mutex

mutex_type* mutex() const noexcept;
獲取互斥量
返回指向所管理互斥量物件的指標。

請注意,unique_lock 不會釋放對所管理互斥量物件的所有權:也就是說,如果它擁有對互斥量的鎖定,它仍然負責在某個時間點(例如銷燬時)解鎖它。

要檢索並獲取所管理互斥量物件的所有權,請參閱unique_lock::release

引數



返回值

指向由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::mutex example
#include <iostream>       // std::cout
#include <thread>         // std::thread
#include <mutex>          // std::mutex, std::unique_lock, std::defer_lock

class MyMutex : public std::mutex {
  int _id;
public:
  MyMutex (int id) : _id(id) {}
  int id() {return _id;}
};

MyMutex mtx (101);

void print_ids (int id) {
  std::unique_lock<MyMutex> lck (mtx);
  std::cout << "thread #" << id << " locked mutex " << lck.mutex()->id() << '\n';
}

int main ()
{
  std::thread threads[10];
  // spawn 10 threads:
  for (int i=0; i<10; ++i)
    threads[i] = std::thread(print_ids,i+1);

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

  return 0;
}

可能的輸出(行的順序可能不同,但它們絕不會交錯)

thread #2 locked mutex 101
thread #3 locked mutex 101
thread #1 locked mutex 101
thread #4 locked mutex 101
thread #5 locked mutex 101
thread #6 locked mutex 101
thread #7 locked mutex 101
thread #8 locked mutex 101
thread #9 locked mutex 101
thread #10 locked mutex 101


資料競爭

訪問unique_lock物件。
其管理的互斥量物件不被此操作訪問(儘管返回了指向它的指標)。

異常安全

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

另見