#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;
}