死锁》相互持有彼此的资源
- 互斥条件(Mutual Exclusion):资源在同一时间只能被一个线程所占有。当一个线程已经占有了某个资源,其他线程无法访问这个资源,直到该资源被占有线程释放。
- 持有并等待(Hold and Wait):线程在持有至少一个资源的同时,又尝试请求其他线程所占有的资源。这会导致线程在等待其他资源时,仍然持有已经占有的资源。
- 非抢占条件(No Preemption):线程所占有的资源不能被其他线程抢占。只有当线程主动释放资源时,其他线程才能获取这个资源。
- 循环等待(Circular Wait):存在一组线程T1、T2、...、Tn,其中T1等待T2占有的资源,T2等待T3占有的资源,...,Tn等待T1占有的资源,形成一个循环等待的关系。
两个女生要出门,只有一套衣服。一件上衣一件裙子,女生a穿着上衣要女生b的裙子,女生b穿着裙子要女生a的上衣。这样就死锁了,都出不去。
正确的应该是,拿到裙子的可以获取上衣,拿到上衣无法拿到裙子的就释放上衣。
拿到裙子上衣的出门后买了新衣服,释放旧的上衣裙子给其他人。