C++实现简洁的死锁程序 1.单线程对一个资源重复申请上锁的情况2. 两个线程对两个资源申请上锁,形成环路。 1.单线程对一个资源重复申请上锁的情况 #include <iostream> #include <thread> #include <mutex> #include <unistd.h> using namespace std; int data = 1; mutex mt1,mt2; void a2() { data = data * data; mt1.lock(); //第二次申请对mt1上锁,但是上不上去 cout<<data<<endl; mt1.unlock(); } void a1() { mt1.lock(); //第一次对mt1上锁 data = data+1; a2(); cout<<data<<endl; mt1.unlock(); } int main() { thread t1(a1); t1.join(); cout<<"main here"<<endl; return 0; } 2. 两个线程对两个资源申请上锁,形成环路。 #include <iostream> #include <thread> #include <mutex> #include <unistd.h> using namespace std; int data = 1; mutex mt1,mt2; void a2() { mt2.lock(); sleep(1); data = data * data; mt1.lock(); //此时a1已经对mt1上锁,所以要等待 cout<<data<<endl; mt1.unlock(); mt2.unlock(); } void a1() { mt1.lock(); sleep(1); data = data+1; mt2.lock(); //此时a2已经对mt2上锁,所以要等待 cout<<data<<endl; mt2.unlock(); mt1.unlock(); } int main() { thread t2(a2); thread t1(a1); t1.join(); t2.join(); cout<<"main here"<<endl; //要t1线程、t2线程都执行完毕后才会执行 return 0; }