天天看点

多线程编程发生死锁的原因

  • 刚刚9点微信会议面试,被问到多线程什么情况下会发生死锁,只答上来一个名词“循环等待”,当时有点蒙,想不起来循环等待是怎么产生的。
  • 10点多结束,现在想起来了。
  • 这个例子就能解释:
    • 现在有两个线程:Thread1与Thread2 以及两个资源 R1与R2;
    • 现在让Thread1持有R1(Thread1进入临界区,独占R1),让Thread2持有R2(Thread2进入临界区,独占R2);
    • 再让Thread1去尝试持有R2(R2已经被Thread2持有,Thread1进入等待);
    • 再让Thread2去尝试持有R1(R1已经被Thread1持有,Thread2进入等待);
    • 就发生了循环等待;

继续阅读