c++多线程(5)之unique_lock的使用

本文详细介绍了C++中unique_lock的使用,包括与lock_guard相似的单参数用法,以及采用不同第二个参数(adopt_lock、try_to_lock、defer_lock)的情况。还讲解了unique_lock的方法,如lock、unlock、try_lock和release,特别强调了release函数在释放互斥量所有权中的作用。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值