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对象。
其管理的互斥量对象不被此操作访问(尽管返回了指向它的指针)。

异常安全

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

另见