朔州市建设监理公司网站,网站建设营销企业,网络新闻发布平台发稿,黑马程序员线上课程前言 死锁#xff1a;多个线程同时被阻塞#xff0c;他们中的一个或全部都在等待某个资源被释放。由于线程被无限期地阻塞#xff0c;因此程序不可能正常终止。 目录
前言
一、死锁的三种典型情况
#xff08;一#xff09;一个线程一把锁
#xff08;二#xff09;…前言 死锁多个线程同时被阻塞他们中的一个或全部都在等待某个资源被释放。由于线程被无限期地阻塞因此程序不可能正常终止。 目录
前言
一、死锁的三种典型情况
一一个线程一把锁
二两个线程两把锁
三N个线程M把锁
二、死锁产生的必要条件缺一不可
一互斥使用
二不可抢占
三请求和保持
四循环等待
三、死锁的解决方案 一、死锁的三种典型情况
一一个线程一把锁
一个线程一把锁但是都是不可重入锁。该线程争对这个锁连续加锁就会陷入死锁。如 二两个线程两把锁
两个线程两把锁把这两个线程先分别获取一把锁然后再同时尝试获取对方的锁。 三N个线程M把锁 二、死锁产生的必要条件缺一不可
一互斥使用
一个线程获取到一把锁之后别的线程不能获取到这个锁。
二不可抢占
锁只能被持有者主动释放而不能被其他线程直接抢走。
三请求和保持
一个线程去尝试获取更多的锁在获取第二把锁的过程中会对第一把锁始终保持获取状态。
四循环等待
t1 尝试获取 locker2需要t2 执行完释放 locker2;
t2 尝试获取 locker1需要t1 执行完释放 locker1.
三、死锁的解决方案
对于死锁产生的必要条件中因为他们是缺一不可的所以解决其中一个条件死锁的问题就能被解决。解决死锁最关键的要点是第4点。
如果对于获取锁有一个编号并且规定加锁的顺序那么死锁的问题就可以解决了。如
我们规定locker1是第一步加锁locker2是第二步加锁。那么在t1尝试获取locker2的时候t2仍然处于申请尝试获取locker1的状态中没有获取locker2t1对于locker2的获取就会成功。