线程死锁
1. 定义:死锁发生在多个线程相互等待对方释放锁时。比如说线程 1 持有锁 R1,等待锁 R2;线程 2 持有锁 R2,等待锁
R1。
2.条件:死锁发生的四个条件
第一条件是互斥:资源不能被多个线程共享,一次只能由一个线程使用。如果一个线程已经占用了一个资源,其他
请求该资源的线程必须等待,直到资源被释放。
第二个条件是持有并等待:一个线程已经持有一个资源,并且在等待获取其他线程持有的资源。
第三个条件是不可抢占:资源不能被强制从线程中夺走,必须等线程自己释放。
第四个条件是循环等待:存在一种线程等待链,线程 A 等待线程 B 持有的资源,线程 B 等待线程 C 持有的资源, 直到线程 N 又等待线程 A 持有的资源。
3. 如何避免死锁
第一,所有线程都按照固定的顺序来申请资源。例如,先申请 R1 再申请 R2。
第二,如果线程发现无法获取某个资源,可以先释放已经持有的资源,重新尝试申请。
R1。
2.条件:死锁发生的四个条件
第一条件是互斥:资源不能被多个线程共享,一次只能由一个线程使用。如果一个线程已经占用了一个资源,其他
请求该资源的线程必须等待,直到资源被释放。
第二个条件是持有并等待:一个线程已经持有一个资源,并且在等待获取其他线程持有的资源。
第三个条件是不可抢占:资源不能被强制从线程中夺走,必须等线程自己释放。
第四个条件是循环等待:存在一种线程等待链,线程 A 等待线程 B 持有的资源,线程 B 等待线程 C 持有的资源, 直到线程 N 又等待线程 A 持有的资源。
3. 如何避免死锁
第一,所有线程都按照固定的顺序来申请资源。例如,先申请 R1 再申请 R2。
第二,如果线程发现无法获取某个资源,可以先释放已经持有的资源,重新尝试申请。
全部评论
相关推荐
查看11道真题和解析 点赞 评论 收藏
分享