計算機操作系統零散筆記——關於死鎖(一)

學習進程的同步的時突然變的很浮躁,今天先跳到死鎖

Deadlock 死鎖

一組被阻塞的進程,每個進程持有一個資源,並等待獲取集合中另一個進程持有的資源。

資源是什麼?
操作系統中的一切都是資源
硬件資源 軟件資源等等等等各種資源。

進程使用資源的過程:

Request open(), malloc(), wait() 請求資源
use 使用資源
Release 釋放資源 close(), free(), signal()
平時就算定義一個整數,比如int a這樣,也都有着進程使用資源的所有過程,只不過編譯器在定義語法的時候已經幫助我們搞定了。

棧溢出

void* thread1(void * param){
	for( ; ; ){
		pthread_mutex_lock(&mutex1);
		pthread_mutex_lock(&mutex2);
		value++;
		pthread_mutex_unlock(&mutex1);
		pthread_mutex_unlock(&mutex2);
		}
}
void* thread2(void * param){
	for( ; ; ){
		pthread_mutex_lock(&mutex2);
		pthread_mutex_lock(&mutex1);
		value++;
		pthread_mutex_unlock(&mutex2);
		pthread_mutex_unlock(&mutex1);
		}
}

很明顯,上面的樣例就會造成死鎖。

死鎖發生的四個基本條件:

互斥條件 : 在任意時刻只有一個進程使用
保持等待:吃着碗裏的看着鍋裏的
不可剝奪:一個資源被拿到後不會被強行剝奪
循環等待:一推進程在循環等待

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

有環的話可能有死鎖,沒環一定沒死鎖。

有環的時候:
如果每個資源只有一個。
如果每個資源有多個,就不一定了。

接下來進入重點

怎麼解決死鎖。

Deadlock prevention 死鎖阻止

Deadlock aviodance 死鎖避免

這倆是死鎖永遠不會發生

Deadlock
請聽下回分解。。

發佈了52 篇原創文章 · 獲贊 24 · 訪問量 6279
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章