如何給女朋友介紹什麼是死鎖

您的關注、點贊、轉發是對我們最大的支持

週五下班比較早,剛剛回到家,女朋友蹦蹦跳跳的捧著電腦朝我跑過來,看起來很高興的樣子。

跟你說個好消息,杭州市政府公佈了公證搖號的政策細則。

如何給女朋友介紹什麼是死鎖

買房搖號的麼?那算什麼好消息啊。

如何給女朋友介紹什麼是死鎖

可以搖號了就公平了呀,就有機會了呀。並且還有傾斜呢。

如何給女朋友介紹什麼是死鎖

人家說的是對“無房家庭”給予傾斜,提供一定比例的房源保障。我們可不算哦。

如何給女朋友介紹什麼是死鎖

“無房家庭”是指,在我市限購範圍內無自有住房的家庭(不含未婚、2018年4月4日後離異單身以及2018年4月4日後因自有住房交易產生的“無房家庭”)。

哦,單身狗沒有傾斜麼,那結婚了不就好了嗎。

如何給女朋友介紹什麼是死鎖

可是這個政策一出來,結婚買房之間就出現死鎖了。

如何給女朋友介紹什麼是死鎖

死鎖?啥意思,不明白。

如何給女朋友介紹什麼是死鎖

你聽我跟你說。

如何給女朋友介紹什麼是死鎖

丈母孃要求:想結婚,必須先買房。

政府要求:想買房,要先結婚。

這不就出現了死鎖了麼。

死鎖

死鎖(英語:Deadlock),計算機科學名詞。當兩個以上的運算單元,雙方都在等待對方停止運行,以獲取系統資源,但是沒有一方提前退出時,就稱為死鎖。

舉一個簡單的例子就很容易理解什麼是死鎖了。

我和女朋友一起玩絕地求生,我撿到了一把98K,女朋友撿到了一個八倍鏡。我手裡有98K,想要女朋友包裡的八倍鏡。女朋友包裡有八倍鏡,想要我手裡的98K。如果我不把98K給女朋友,女朋友也不把八倍鏡給我。那我們兩個之間就出現了死鎖。(我們假設這個遊戲中只有一把98K和一個八倍鏡。並且我和女朋友都不會打死對方並搶奪裝備)

如何給女朋友介紹什麼是死鎖

計算機系統中就是類似的例子。多個線程,線程A持有資源1,等待資源2,線程B持有資源2,等待資源1。線程1和線程2之間就出現了死鎖。即無法進行後面的操作。

奧,原來這就是死鎖,那死鎖很容易發生嗎?

如何給女朋友介紹什麼是死鎖

死鎖是比較嚴重的問題,他的發生需要同時存在幾個條件的。

如何給女朋友介紹什麼是死鎖

死鎖的條件

在吃雞遊戲中,出現死鎖的前提是滿足了以下幾個條件的:

1、互斥條件:一把98K只能同時被一個人撿起來,無法被多個人同時撿起來。八倍鏡也一樣。

2、佔有且等待:持有98K的人希望拿到八倍鏡,並且不願意放棄手裡的98K。持有八倍鏡的人也一樣。

3、不可強行佔有:持有98K和八倍鏡的人不會從對方手裡直接把東西搶過來。

4、循環等待條件:兩個人分別持有98K和八倍鏡,並且需要同時擁有98K和八倍鏡才能大殺四方。

以上就是死鎖的四個條件。映射到計算機系統中,分別對應著:

1、互斥條件:一個資源每次只能被一個進程使用。

2、佔有且等待:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。

3、不可強行佔有:進程已獲得的資源,在末使用完之前,不能強行剝奪。

4、循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關係。

這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立。

那死鎖一旦發生了,有什麼辦法可以解決嗎?

如何給女朋友介紹什麼是死鎖

死鎖是比較容易解決和避免的。

如何給女朋友介紹什麼是死鎖

死鎖的解決和預防

前面提到過死鎖的四個必要條件,也就是說,只有在這四個條件同時滿足的時候才會出現死鎖。

那麼,想要解決死鎖,就想辦法破壞四個條件中的任意一個就可以了。

比如吃雞遊戲,如果發生了死鎖的話,比較簡單的方式就是其中一個放棄裝備,讓另外一個人撿起來就可以了(破壞佔有且等待條件)。或者就是其中一個人把另外一個人打死,然後舔他的包(破壞不可強行佔有條件)。

如何給女朋友介紹什麼是死鎖

所以,對於計算機系統中的死鎖,預防方式就是避免以上四個條件同時出現。共有以下四個大類:

避免互斥條件

允許進程同時訪問某些資源。但是,有的資源是不允許被同時訪問的,這是由資源本身的屬性所決定的。所以,這種辦法並無實用價值。

避免佔有且等待

為預防佔有且等待條件,可以要求進程一次性的請求所有需要的資源,並且阻塞這個進程直到所有請求都同時滿足。這個方法比較低效。

還有一種方式,就是如果佔有某些資源的一個進程進行進一步資源請求時被拒絕,則該進程立刻釋放它最初佔有的資源。

避免不可搶佔

如果一個進程請求當前被另一個進程佔有的一個資源,則操作系統可以搶佔另外一個進程,要求它釋放資源。

避免循環等待

實行資源有序分配策略。如果一個進程已經分配了R類資源,那麼接下來請求的資源只能是那些排在R類型之後的資源類型。

我明白了,可是這些都是理論啊,有沒有成熟的方案呢。

如何給女朋友介紹什麼是死鎖

當然有了。銀行家算法就是比較經典的避免死鎖的算法。

如何給女朋友介紹什麼是死鎖

銀行家算法

銀行家算法(Banker's Algorithm)是一個避免死鎖的著名算法,是由艾茲格·迪傑斯特拉在1965年為T.H.E系統設計的一種避免死鎖產生的算法。它以銀行借貸系統的分配策略為基礎,判斷並保證系統的安全運行。

算法背景

在銀行中,客戶申請貸款的數量是有限的,每個客戶在第一次申請貸款時要聲明完成該項目所需的最大資金量,在滿足所有貸款要求時,客戶應及時歸還。銀行家在客戶申請的貸款數量不超過自己擁有的最大值時,都應儘量滿足客戶的需要。在這樣的描述中,銀行家就好比操作系統,資金就是資源,客戶就相當於要申請資源的進程。

算法原理

我們可以把操作系統看作是銀行家,操作系統管理的資源相當於銀行家管理的資金,進程向操作系統請求分配資源相當於用戶向銀行家貸款。

為保證資金的安全,銀行家規定:

(1) 當一個顧客對資金的最大需求量不超過銀行家現有的資金時就可接納該顧客;

(2) 顧客可以分期貸款,但貸款的總數不能超過最大需求量;

(3) 當銀行家現有的資金不能滿足顧客尚需的貸款數額時,對顧客的貸款可推遲支付,但總能使顧客在有限的時間裡得到貸款;

(4) 當顧客得到所需的全部資金後,一定能在有限的時間裡歸還所有的資金.

操作系統按照銀行家制定的規則為進程分配資源,當進程首次申請資源時,要測試該進程對資源的最大需求量,如果系統現存的資源可以滿足它的最大需求量則按當前的申請量分配資源,否則就推遲分配。當進程在執行中繼續申請資源時,先測試該進程本次申請的資源數是否超過了該資源所剩餘的總量。若超過則拒絕分配資源,若能滿足則按當前的申請量分配資源,否則也要推遲分配。

哇哦,好聰明的銀行家,這就避免了死鎖呢。

如何給女朋友介紹什麼是死鎖

是的,死鎖問題是比較容易識別和避免的。

如何給女朋友介紹什麼是死鎖

那這麼容易的話,買房和結婚的這個死鎖你準備怎麼解決啊。

如何給女朋友介紹什麼是死鎖

額…

如何給女朋友介紹什麼是死鎖


分享到:


相關文章: