C++11学习笔记--thread&mutex

C++11学习笔记--thread&mutex,第1张

C++11学习笔记--thread&mutex
#include 
#include 
#include 
#include 




std::mutex m,n;

void referencefunc(int &num)
{
	num = 100;
}

void bodyfunc(int time)
{
	for (int i = 0; i < time; ++i)
	{
		{//加锁保证下面的打印在一行,不会被其他插入
			std::lock_guard nguard(n);
			std::cout << i << " " << std::this_thread::get_id() << std::endl;;
		}
		std::this_thread::sleep_for(std::chrono::milliseconds(100));
	}
}

void doublelockfunc(int& a, int& b)
{
	//同时控制两个不同的锁,而且需要他们控制的内容同步时
	//建议std::lock和std::lock_guard结合使用。
	//进入范围后m、n既被lock锁住,又可以在离开范围时自动解锁
	//而且不会存在:	不同线程也使用这两把锁时,
	//					由于加锁顺序不同而可能出现的死锁情况
	std::lock(m, n);
	std::lock_guard mguard(m, std::adopt_lock);
	std::lock_guard nguard(n, std::adopt_lock);
	a++;
	b++;
}

void testThread()
{
	int v = 0;
	//使用thread调用lambda形式
	std::thread th1([&v]() {
		referencefunc(v);
	});
	th1.join();
	std::cout << "after lambda v = " << v << std::endl;

	v = 0;
	//使用thread调用函数形式
	std::thread th2(referencefunc, std::ref(v));
	th2.join();
	std::cout << "after thread v = " << v << std::endl;

	int v1 = 0, v2 = 0;
	std::thread th3([&v1, &v2]() { doublelockfunc(v1, v2); });
	th3.join();

	std::thread th(bodyfunc, 10);
	bodyfunc(10);
	th.join();
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5713947.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存