目录
mutex类
(互斥量)创建mutex类的对象
1、通过调用1ock函数进行加锁
2、通过调用unlock进行解锁注意点:lock必须与unlock出现
lock和unlock函数
#include<iostream>
#include<list>
#include<thread>
#include<mutex>
using namespace std;
class SeaKing
{
public:
	void MakeFriend()
	{
		for (int i = 0; i < 10000; i++)
		{
			M_Lock.lock();//加锁
			printf("多一个朋友:%d\n",i);
			Girl.push_back(i);
			M_Lock.unlock();//解锁
		}
	}
	void EndFriend()
	{
		for (int i = 0; i < 10000; i++)
		{
			if (!Girl.empty())
			{
				M_Lock.lock();//加锁
				printf("减少一个朋友:%d\n",i);
				Girl.pop_back();
				M_Lock.unlock();//解锁
			}
			else
			{
				printf("Nofriend\n");
			}	
		}
	}
private:
	list<int> Girl;
	mutex M_Lock;//互斥量
};
int main()
{
	SeaKing King;
	thread t1(&SeaKing::MakeFriend, &King);
	thread t2(&SeaKing::EndFriend, &King);
	t1.join();
	t2.join();
	return 0;
}lock_guard函数
lock_guard类的构造函数中调用lock函数
lock_gurad类的析构函数调用了unlock函数
类似于一个自动的锁,不能做拷贝也不能做构造,相当稳定。
#include<iostream>
#include<list>
#include<thread>
#include<mutex>
using namespace std;
class SeaKing
{
public:
	void MakeFriend()
	{
		lock_guard<mutex> LJObject(M_Lock);
		for (int i = 0; i < 10000; i++)
		{
			printf("多一个朋友:%d\n",i);
			Girl.push_back(i);
		}
	}
	void EndFriend()
	{
		for (int i = 0; i < 10000; i++)
		{
			if (!Girl.empty())
			{
				lock_guard<mutex> LJObject(M_Lock);
				printf("减少一个朋友:%d\n",i);
				Girl.pop_back();
			}
			else
			{
				printf("Nofriend\n");
			}	
		}
	}
private:
	list<int> Girl;
	mutex M_Lock;//互斥量
};
int main()
{
	SeaKing King;
	thread t1(&SeaKing::MakeFriend, &King);
	thread t2(&SeaKing::EndFriend, &King);
	t1.join();
	t2.join();
	return 0;
}









