什么叫作死锁:
线程1需要先锁锁A,再锁锁B,才可以执行相应的保护代码。线程2需要先锁锁B,再锁锁A,才可以运行相应的保护代码。如果出现这种情况:线程1锁住了锁A,而线程2锁住了锁B,这个时候两个程序都在等待对方解锁。这就出现了死锁现象。
代码:
#include <iostream>
#include <thread>
#include <mutex>
#include <deque>
class A
{
public:
void WriteFunction()
{
for (int i = 0; i < 1000; ++i)
{
my_mutex_1.lock();
my_mutex_2.lock();
std::cout << "向队列中添加一个元素" << std::endl;
my_deque.push_back(i);
my_mutex_1.unlock();
my_mutex_2.unlock();
}
}
void ReadFunction()
{
for (int i = 0; i < 1000; ++i)
{
my_mutex_2.lock();
my_mutex_1.lock();
if (!my_deque.empty())
{
std::cout << "读出队列的第一个元素: " << my_deque.front() << std::endl;
my_deque.pop_front();
}
my_mutex_2.unlock();
my_mutex_1.unlock();
}
}
private:
std::deque<int> my_deque;
std::mutex