目录
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;
}