unique_lock是一个类模板,下面简单介绍它的使用方式。
如果只用一个参数,unique_lock与lock_gard的使用方法一样:
可以参考我的这篇博客:https://blog.csdn.net/shaochuang1/article/details/100991407
代码:
#include <iostream>
#include <thread>
#include <mutex>
#include <deque>
class A
{
public:
void WriteFunction()
{
for (int i = 0; i < 1000; ++i)
{
std::unique_lock<std::mutex> my_uniquelock_1(my_mutex_1);
std::cout << "向队列中添加一个元素" << std::endl;
my_deque.push_back(i);
}
}
void ReadFunction()
{
for (int i = 0; i < 1000; ++i)
{
std::unique_lock<std::mutex> my_uniquelock_1(my_mutex_1);
if (!my_deque.empty())
{
std::cout << "读出队列的第一个元素: " << my_deque.front() << std::endl;
my_deque.pop_front();
}
}
}
private:
std::deque<int> my_deque;
std::mutex my_mutex_1;
};
int main()
{
A a;
std::thread my_thread_1(&A::WriteFunction, std::ref(a));
std::thread my_thread_2(&A::ReadFunction, std::ref(a));
my_thread_1.join();
my_thread_2.join();
std::cout << "Hello World!\n";
}
unique_lock的第二个参数s
std::adopt_lock;
std::try_to_lock;
std::defer_lock;
std::unique_lock<std::mutex> my_uniquelock_1(my_mutex_1, std::adopt_lock)
当互斥量已经被l