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