1. 程式人生 > >我來說說作業系統中 死鎖與飢餓的區別辨析

我來說說作業系統中 死鎖與飢餓的區別辨析

我覺得可以這麼理解死鎖和飢餓的區別,首先死鎖是同步的,飢餓時非同步的。也就是說,死鎖可以認為是兩個執行緒或程序同時在請求對方佔有的資源,飢餓可以認為是一個執行緒或是程序在無限的等待另外兩個或多個執行緒或程序佔有的但是不會往外釋放的資源。

  介紹“死鎖”的例子1:如果執行緒A鎖住了記錄R1並等待記錄R2,而執行緒B鎖住了記錄R2並等待記錄R1,這樣兩個執行緒A和B就發生了死鎖現象。

  介紹“死鎖”的例子2:兩個山羊過一個獨木橋,兩隻羊同時走到橋中間,一個山羊等另一個山羊過去了然後再過橋,另一個山羊等這一個山羊過去,結果兩隻山羊都堵在中間動彈不得。

  介紹飢餓的例子:資源在其中兩個或以上執行緒或程序相互使用,第三方執行緒或程序始終得不到。想像一下三個人傳球,其中兩個人傳來傳去,第三個人始終得不到。

  出現以下四種情況會產生死鎖:

  1,相互排斥。一個執行緒或程序永遠佔有共享資源,比如,獨佔該資源。

  2,迴圈等待。例如,程序A在等待程序B,程序B在等待程序C,而程序C又在等待程序A。

  3,部分分配。資源被部分分配,例如,程序A和B都需要訪問一個檔案,同時需要用到印表機,程序A得到了這個檔案資源,程序B得到了印表機資源,但兩個程序都不能獲得全部的資源了。

  4,缺少優先權。一個程序獲得了該資源但是一直不釋放該資源,即使該程序處於阻塞狀態。

  按照前面的分析,情況1和情況4是執行緒或程序無休止的等待另外的幾個執行緒或程序所佔據的資源。

  針對上面可能出現死鎖的幾種情況,可以給出預防措施,比如控制執行緒或程序如果判斷不能夠獲取到所需的全部的資源,那麼就釋放已經佔有的資源等等。

  現實中,當遇到一個物件要執行多個動作,而這些動作又穿插在一起時就要使用執行緒的概念來編寫程式,此時就需要特別注意程式執行效率的問題和預防死鎖或者飢餓問題的出現。

相關推薦

說說作業系統 飢餓區別辨析

我覺得可以這麼理解死鎖和飢餓的區別,首先死鎖是同步的,飢餓時非同步的。也就是說,死鎖可以認為是兩個執行緒或程序同時在請求對方佔有的資源,飢餓可以認為是一個執行緒或是程序在無限的等待另外兩個或多個執行緒或程序佔有的但是不會往外釋放的資源。   介紹“死鎖”的例子1:如果執

區別飢餓區別

第一次玩屬於自己的部落格,今天在一個App上看到的,說的很好,再敲了一遍,分享一下有關於死鎖、活鎖及飢餓的概念和區別,希望大家共同進步! 死鎖:是指兩個或兩個以上的程序(或執行緒)在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,

第六章—併發性:飢餓【計算機作業系統

6.1 給出可重用資源和可消費資源的例子。 可重用資源:處理器,I/O通道,主存和輔存,裝置以及諸如檔案,資料庫和訊號量之類的資料結構。 可消費資源:中斷,訊號,訊息和I/O緩衝區中的資訊。 6.2 可能發生死鎖所必須的三個條件是什麼? 互斥,佔有且等待,非搶佔。 6.

Java常見的例項

順序死鎖:過度加鎖,導致由於執行順序的原因,互相持有對方正在等待的鎖 資源死鎖:多個執行緒在相同的資源上發生等待 由於呼叫順序而產生的死鎖 public class Test { Object leftLock = new Object(); Ob

作業系統》第6章:併發:飢餓

1,什麼是死鎖: 一組程序中,每個程序都無限等待被該組程序中另一個程序所佔有的資源,因而永遠無法得到的資源,這種現象稱為程序死鎖,這一組程序就稱為死鎖程序(處於阻塞態) 2,什麼是可重用資源?(P186) 一次只能供一個程序安全地使用,並且不會由於使用而耗盡的資源。程序得

MySQL/InnoDB、悲觀、共享、排它、行、表MySQL讀寫分離

MySQL/InnoDB的加鎖,一直是一個面試中常問的話題。例如,資料庫如果有高併發請求,如何保證資料完整性?產生死鎖問題如何排查並解決?我在工作過程中,也會經常用到,樂觀鎖,排它鎖,等。於是今天就對這幾個概念進行學習,屢屢思路,記錄一下。 注:MySQL是一個支援

作業系統 併發:飢餓 複習題&練習題&總結

Part1 複習題: 6.1可重用資源:處理器、I/O通道,貯存和輔存,裝置以及諸如檔案,資料庫和訊號量之類的資料結構。         可消費資源:中斷、訊號、訊息和I/O緩衝區的資訊。 6.2產生死鎖的3個必要條件:互斥、佔有且等待、非搶佔。 6.3產生死鎖的4個條件:

11.python並發入門(part4 遞歸

python lock 線程 互斥鎖 rlock 一、關於死鎖。死鎖,就是當多個進程或者線程在執行的過程中,因爭奪共享資源而造成的一種互相等待的現象,一旦產生了死鎖,不加人工處理,程序會一直等待下去,這也被稱為死鎖進程。下面是一個產生“死鎖”現象的例子:import threadingim

MySQL 日誌二三事

mysql索引 open 靜態變量 ... 硬盤 永久 state stack 應該 最近線上 MySQL 接連發生了幾起數據異常,都是在淩晨爆發,由於業務場景屬於典型的數據倉庫型應用,白天壓力較小無法復現。甚至有些異常還比較詭異,最後 root cause 分析頗費周

python並發編程之多線程2------------遞歸,信號量等

線程的狀態 == 利用 def 就會 req f11 例如 事件 一、死鎖現象與遞歸鎖 進程也是有死鎖的 所謂死鎖: 是指兩個或兩個以上的進程或線程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用, 它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死

並發編程 - 線程 - 1.互斥/2.GIL解釋器/3.遞歸/4.信號量/5.Event事件/6.定時器

級別 src 總結 alex post strip CQ bsp 回收機制 1.互斥鎖: 原理:將並行變成串行 精髓:局部串行,只針對共享數據修改 保護不同的數據就應該用不用的鎖 1 from threading import Thread

遞歸

for lose -a int time chang 連續 bsp tar 死鎖導致程序卡死,互斥鎖只能acquire一次,想acquire必須先release。 from threading import Thread,Lock import time mutexA=L

Python的形成示例及情況的防止

程序 ast mon error: none args ria 在那 n) 死鎖示例搞多線程的經常會遇到死鎖的問題,學習操作系統的時候會講到死鎖相關的東西,我們用Python直觀的演示一下。死鎖的一個原因是互斥鎖。假設銀行系統中,用戶a試圖轉賬100塊給用戶b,與此同時用戶

5.1.17 的解決(遞歸)

pri XA self. TE AR 圖片 解決 OS eas 1. 排斥鎖可能會造成死鎖,先看看死鎖的現象 from threading import Thread,Lock import time mutexA=Lock() mutexB=Lock() class

遞迴

程序也有死鎖與遞迴鎖,在程序那裡忘記說了,放到這裡一切說了額 所謂死鎖: 是指兩個或兩個以上的程序或執行緒在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序,如下就是死鎖 1 from

玩IGFrame(五) 音效音樂播放

各位轉載請註明出處,謝謝合作~作者:ioozhuangzi 二話不說,先看示例再說org.ioo.igframe.samples.sample05包下的程式碼。 注意,請不要忘了匯入依賴包!! ClipTest是音效播放的示例,按下滑鼠左鍵是底鼓,右鍵是軍鼓,滾輪是吊鑔,是不是有點兒架子

區別饑餓的區別

strong lock 通過 味道 進程 無法 必須 車輛 中間 第一次玩屬於自己的博客,今天在一個App上看到的,說的很好,再敲了一遍,分享一下有關於死鎖、活鎖及饑餓的概念和區別,希望大家共同進步! 死鎖:是指兩個或兩個以上的進程(或線程)在執行過程中,因爭奪資源而造成的

#Java有什麼區別?如何避免

Java中活鎖和死鎖是指什麼,你知道他們之間的區別嗎,下面我們可以來討論一下: 如果有想要學習java的小夥伴,可來我們的java學習扣裙哦:72340,3928裡面贈送java系列教學視訊和資料!小編也是從事了6年java開發的全棧工程師,歡迎初學者和想要進階

學網路——C/SB/S詳解

1.C/S結構,即Client/Server(客戶機/伺服器)結構,是大家熟知的軟體系統體系結構,通過將任務合理分配到Client端和Server端,降低了系統的通訊開銷,可以充分利用兩端硬體環境的優勢。 2.B/S結構,即Browser/Server(瀏覽器/伺服器)結構,是隨著Interne

Apple ID被鎖定了這麼辦?教你解

最近很多朋友問我,剛得到的apple id就被鎖定了。怎麼樣解決! 其實您的 Apple ID 出於安全原因而被鎖定,可能是以下幾種原因導致的: 1.下載了第3方app(解除安裝第3方軟體,然後從新修改密碼就可以解決) 2.新ID常時間沒有裝置登入(只需要重新修改密碼和密保就可以解