內容來自greenpills的github筆記,補充記錄
死鎖發生要滿足四個條件:
· 互斥條件某個資源在一段時間內只能由乙個程序占有。只有在該程序主動釋放它後,其它程序才能主動釋放它。比如印表機。
預防:預防是保證系統不進入死鎖狀態的策略。
對四個條件的破壞,互斥條件不能破壞(沒用)
避免 死鎖的避免是指不限制程序有關申請資源的命令,對程序所發出的每乙個申請資源命令加以動態地檢查,並根據檢查結果決定是否進行資源分配。(不破壞條件,對申請情況進行檢查,可以就分配)比如說銀行家演算法。程序申請資源時候,先試探分配給該程序,然後根據安全性演算法判斷分配後地系統是不是處於安全狀態,不安全就繼續等待。
判定安全狀態:已分配資源、還需要的資源、可用的資源、finish判定符。
程式執行的例項,是程式向作業系統申請資源(比如記憶體空間)的基本單位。是該程式的可執行機器碼在記憶體的拷貝。
程序間通訊
訊號量(也叫訊號標),可以看作一種具有原子操作(不可以中斷的操作,要麼做了要麼沒做)的計數器,用於保持在0到指定最大值之間的乙個計數值。用來控制多個程序對共享資源的訪問,通常來描述臨界資源(公用的裝置,或者是儲存器)的數目, 當作鎖(lock)來使用,防止乙個程序訪問另乙個程序正在使用的資源。實現互斥和同步的操作。提供一種機制:讓乙個臨界區同乙個時刻只能有乙個程序(執行流)來訪問它。
執行緒是作業系統能進行運算排程的最小單位,被包含在程序彙總,是程序的實際運作單元。一條執行緒指的是程序中乙個單一順序的控制六。乙個程序可以併發多個執行緒,每條執行緒併發執行不同任務。是獨立排程和分派的基本單位。
同一程序的多條執行緒共享程序全部的系統資源(比如說虛擬位址空間,檔案描述符)但同乙個程序中的多個執行緒有各自的呼叫棧,自己的暫存器環境,自己的執行緒本地儲存。
執行緒間的通訊
鎖。包括互斥鎖(mutex,以排他的方式,防止資料結構被併發修改,當資源占用,申請者進入睡眠狀態)、讀寫鎖(允許多個執行緒同時讀共享資料,但互斥鎖)、自旋鎖(類似互斥鎖,為了保護共享資源,迴圈檢測保持者是否釋放鎖。)、條件變數(以原子的方式阻塞程序,直到某個特定條件為真,和互斥鎖一起使用,對條件的測試是在互斥鎖保護下進行的)。
訊號量訊號
執行緒和程序
標準的定義是 程序是執行緒的容器,乙個程序可於乙個或者多個執行緒,它是系統分配資源的基本單位 同乙個程序下,執行緒共享位址空降 已經開啟的檔案 訊號處理函式 報警訊號和其他,執行緒自己只保留程式計數器和棧。但是很遺憾的,這個只是教科書上的定義,實際情況是每個作業系統實現的作業系統特性不同,實現的方法...
程序和執行緒
乙個程序就是當前正在執行的乙個程式,包括程式的暫存器 程式計數器和變數的當前值。不同的程序擁有不同的位址空間。而執行緒可以理解為是程序中的控制流。同乙個程序內也就是說在同乙個位址空間內可以有多個控制流。也就是可以有多個線 程,他們共享位址空間。我們通常將程序視為是資源的集合,程序中有程式的正文 資料...
執行緒和程序
對於求職者,在面試的時候大多都會被問到 你對多執行緒了解麼?給我講講執行緒和程序的區別吧。在unix中,乙個程序可以理解為執行緒 位址空間 檔案描述符 資料,道破現實,其實就相當於老闆和員工,老闆就是程序,員工就是執行緒。老闆需要僱傭若干員工 執行緒 還要有辦公樓 位址空間 還要有若干的辦公裝置 檔...