C++ Boost 多线程(五),线程的死锁

#include <iostream>
#include <boost/thread.hpp>

using namespace std;

boost::mutex mutex;

void func1()
{
	mutex.lock();
	cout<<"call func1()..."<<endl;
	mutex.unlock();
}

void func2()
{
	mutex.lock();
	cout<<"call func2()..."<<endl;
	func1();
	mutex.unlock();
}

//线程的死锁
int main()
{
	boost::thread t1(func1);
	boost::thread t2(func2);
	t1.join();
	t2.join();

	system("pause");
	return 0;
}


用递归锁解决上述死锁的问题:

#include <iostream>
#include <boost/thread.hpp>

using namespace std;

boost::recursive_mutex mutex;//递归锁

void func1()
{
	mutex.lock();
	cout<<"call func1()..."<<endl;
	mutex.unlock();
}

void func2()
{
	mutex.lock();
	cout<<"call func2()..."<<endl;
	func1();
	mutex.unlock();
}

int main()
{

	boost::thread t1(func1);
	boost::thread t2(func2);
	t1.join();
	t2.join();

	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/u012592062/article/details/80469369