1. 訊號量/互斥體允許程序睡眠屬於睡眠鎖,自旋鎖則不允許呼叫者睡眠,而是讓其迴圈等待,所以有以下區別應用
1)、訊號量和讀寫訊號量適合於保持時間較長的情況,它們會導致呼叫者睡眠,因而自旋鎖適合於保持時間非常短的情況
2)、自旋鎖可以用於中斷,不能用於程序上下文(會引起死鎖)。而訊號量不允許使用在中斷中,而可以用於程序上下文
3)、自旋鎖保持期間是搶占失效的,自旋鎖被持有時,核心不能被搶占,而訊號量和讀寫訊號量保持期間是可以被搶占的。自旋鎖不可遞迴呼叫
另外需要注意的是
1)、訊號量鎖保護的臨界區可包含可能引起阻塞的**,而自旋鎖則絕對要避免用來保護包含這樣**的臨界區,因為阻塞意味著要進行程序的切換,如果程序被切換出去後,另一程序企圖獲取本自旋鎖,死鎖就會發生。
2)、在你占用訊號量的同時不能占用自旋鎖,因為在你等待訊號量時可能會睡眠,而在持有自旋鎖時是不允許睡眠的。
2. 互斥:是指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的
同步:是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源
死鎖:每個核心都在等待其中的乙個資源,但所有的資源都已經被占用了,也就是說。這便會發生所有核心任務都在相互等待,但它們永遠不會釋放已經占有的資源,於是任何核心任務都無法獲得所需要的資源,無法繼續執行,這便意味著死鎖發生了。自死瑣是說自己占有了某個資源,然後自己又申請自己已占有的資源,顯然不可能再獲得該資源。
程序上下文:當乙個程序在執行時,cpu的所有暫存器中的值、程序的狀態以及堆疊中的內容被稱為該程序的上下文。即系統提供給程序的處於動態變化的執行環境總和稱為程序上下文。
3. 阻塞和非阻塞操作
阻塞操作是指在執行裝置操作時若不能獲得資源則掛起程序,直到滿足可操作的條件後在進行操作。
非阻塞操作的程序在不能進行裝置操作時並不掛起,它或者被放棄,或者不停的查詢,直到可以進行操作為止
互斥量與訊號量(互斥與同步)
互斥量 mutex 互斥量表現互斥現象的資料結構,也被當作二元訊號燈。乙個互斥基本上是乙個多工敏感的二元訊號,它能用作同步多工的行為,它常用作保護從中斷來的臨界段 並且在共享同步使用的資源。mutex本質上說就是一把鎖,提供對資源的獨佔訪問,所以mutex主要的作用是用於互斥。mutex物件的值,只...
socket阻塞與非阻塞 同步與非同步概念
看了不少文章,發現socket阻塞 非阻塞 同步 非同步概念講的比較混亂,甚至混用比如非阻塞和非同步。看了unix網路程式設計 五種i o模型 感覺講的比較清晰,現總結下,方便自己記憶理解。本人菜鳥一枚,如果 說得有誤歡迎拍磚指正,在此謝過。阻塞與非阻塞 阻塞與非阻塞io區別在於應用程序的呼叫是否立...
併發概念 同步與非同步 阻塞與非阻塞
同步與非同步 被呼叫者是否主動告訴呼叫者結果,重心是被呼叫者。同步與非同步通常用來形容一次呼叫,關注的是訊息通訊機制。同步呼叫一旦開始,呼叫者必須等到呼叫返回後,才能進行後續的行為。也就是說,呼叫者主動等待呼叫的結果。而非同步則是相反,非同步呼叫發出後,呼叫就會立即返回,告訴呼叫者我方收到請求已經去...