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