3 【后端程序员面试必问的死锁条件与解决方案 - 农夫小田|带你学后端 | 小红书 - 你的生活指南】 😆 CDEtwtv3DoH0IDP 😆 https://www.xiaohongshu.com/discovery/item/627b7f380000000021037d30?source=webshare&xsec_token=ABu5HiQCyybeEdm-FBidSbM97mbZaDpekSRpGSIVxxJbM=&xsec_source=pc_share
四个必要条件:
(1)互斥性:一个资源只能被一个线程占有;
(2)请求和保持条件:一个线程对请求被占有资源发生阻塞时,对已经占有的资源不释放;
(3)不剥夺:一个线程在释放资源之前,其他的线程无法剥夺占用;
(4)循环等待:发生死锁时,线程进入死循环,永久阻塞;
解决方案:
(1)破坏请求和保持条件:让进程申请资源时一次申请全部,如果有正在占用的部分,则等待(缺点:进程饥饿状态);申请资源前,释放自己拥有的资源;
(2)破坏不剥夺:去过抢资源,被拒绝,咋释放自己资源;操作系统允许抢资源,就可以解除死锁;
(3)破坏循环等待:所有资源统一编号,进程可在任何时刻提出资源申请,但申请必须按照资源的编号顺序提出;