死鎖的防止方法:如果有死鎖形成,則4個必要條件一定同時成立,于是,只要采用的資源分配策略能使其中之一不成立,則就能防止死鎖的發生 。
(1)互斥條件
要使互斥使用資源的條件不成立,的資源分配策略是允許進程共享資源 。
如“只讀文件”是一種很好的共享資源 。
要破壞“互斥使用資源”的條件經常是行不通的 。如:打印機不能被多個進程共享 。對可共享的磁盤來說,任何時刻也只允許一個進程啟動它 。
(2)占有并等待條件
要是占有并等待資源的條件不成立,經常使用兩種資源分配策略:靜態分配資源和釋放已占資源 。
靜態分配資源策略(也稱為預分配資源)——要求每個進程在開始執行前就申請它所需要的全部資源,僅當系統能滿足進程的資源申請要求且把資源分配給進程后,該進程才能開始執行 。
特點:靜態分配資源的策略實現簡單,但降低了資源的利用率 。
釋放已占資源策略——這種分配策略是僅當進程沒有占有資源時才允許它去申請資源 。如果進程已占用了某些資源而又要再申請資源,則它應先歸還所占的資源后再申請新資源 。
特點:仍會使進程處于等待資源狀態,但不會出現占有了部分資源再等待其它資源的現象 。
(3)可搶奪條件
搶占式資源分配策略:要使不可搶占其它進程占有的資源不成立,可以約定如下:如果一個進程已經占有了某些資源又要申請新資源,而新資源不能滿足必須等待時,系統可以
2/3頁
搶奪該進程已有的資源 。具體做法如下:
一個進程申請的資源尚未被占用,則系統可把資源分配給該進程 。
若進程A申請的資源R已被進程B占用,則查看進程B的狀態 。如果進程B處于等待另一個資源的狀態,那么就搶奪進程B已占的資源R并把R分配給進程A;如果進程B不是處于等待資源狀態,則讓進程A處于等待資源R的狀態 。
一個等待資源的進程只有再得到自己申請的新資源和所有被搶奪的老資源后才能繼續執行 。
這種可搶奪的資源分配策略不是對所有資源都適用的,它只適合于主存和處理器 。
例如:對打印機、磁帶機等就不能采用搶奪的方式,否則會造成混亂 。
(4)循環等待條件
按序分配資源——要使循環等待條件不成立可采用按序分配的資源分配策略 。具體做法是把系統中所有資源排序,對每個資源確定一個編號,規定任何一個進程申請兩個以上的資源時,總是先申請編號較小的資源,再申請編號大的資源 。
預防死鎖的方法1、避免一個線程同時獲取多個鎖 。
2、避免一個線程在鎖內同時占用多個資源,盡量保證每個鎖只占用一個資源 。
3、嘗試使用定時鎖,使用Lock.tryLock(timeout)來替代使用內部鎖機制 。
4、對于數據庫鎖,加鎖和解鎖須在一個數據庫連接里,否則會出現解鎖失敗的情況 。
【死鎖預防 死鎖預防破壞循環等待】死鎖預防的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于死鎖預防破壞循環等待、死鎖預防的信息別忘了在本站進行查找喔 。
- 嬰兒打預防針時間 嬰兒打預防針時間過了怎么辦
- 寶寶打完預防針老睡覺 寶寶打了預防針之后一直睡覺
- 預防針本子補辦要什么 補辦預防針的本子需要帶什么
- 嬰兒咳嗽可以打預防針嗎 嬰兒咳嗽可以打預防針嗎偶爾會咳嗽一下
- 如何預防眼睛老花眼 怎樣保護眼睛預防老花眼
- 預防近視應注意什么 預防近視要注意哪些事項
- 如何預防醫院內感染 如何控制和預防醫院內感染
- 怎么預防蜱蟲叮咬 怎么預防蜱蟲叮咬圖片
- 預防禿頂吃什么 預防禿頂吃什么食物好
- 什么藥預防腹瀉 什么藥預防腹瀉效果較好
