1. 引言:
下面我們研究如何為共享資源新增鎖定.
我們的目的是使所有對共享資源的操作都是原子的, 也就是說, 在操作該共享資源的其他執行緒執行前, 本執行緒對該資源的整個操作就已經完成了. 對我們下面要說的記憶體洩露的舉例來說, 需要確保當乙個執行緒(如b)發現特定記憶體塊需要分配時, 它擁有執行分配的執行權力, 並且需要在其他執行緒(如a, c, d...)執行同一測試之前完成這個工作.
為此, 我們必須建立臨界區: 在任意時刻, **只能被乙個執行緒執行.
2. 概念:
進入休眠: 當乙個linux程序到達某個時間點, 此時它不能進行任何處理時, 它將進入休眠狀態(阻塞), 這將把cpu讓給其他執行執行緒, 直到將來它能夠繼續完成自己的處理為止.
訊號量: 乙個訊號量本質上是乙個整數值, 它和一對函式聯合使用, 這一對函式通常成為p和v, 也就是我們所說的p/v操作.
在這種模式下, 乙個訊號量有時也稱為乙個"互斥體"(mutex), 它是互斥的簡稱.
3. 規則:
自旋鎖,互斥鎖,訊號量
自旋鎖,互斥鎖,訊號量 樂觀鎖和悲觀鎖只是一種理論,是從思想上劃分的。自旋鎖和互斥鎖是應用層確確實實的鎖,用於同步訪問控制 如果一定要劃分,從只有乙個執行緒可以擁有鎖來說,我覺得自旋鎖和互斥鎖應該都屬於悲觀鎖,因為一般的應用不需要支援事物回滾的操作。但是沈詢的直播中說,互斥鎖屬於悲觀鎖 sleep ...
訊號量,互斥鎖,自旋鎖
個人理解 訊號量 程序間的通訊機制 單一個數的訊號 與訊息郵箱,訊息佇列,機理類同,量不同,用訊號量肯定掉cpu 自旋鎖 保護區域不掉cpu,持續查詢,等待 不可用時域長狀態 切記 時域範圍 在程序間的通訊機制函式狀態 鎖 0 互斥鎖與自旋鎖 互斥鎖 執行緒會從sleep 加鎖 running 解鎖...
自旋鎖和訊號量
核心同步措施 用於linux核心 為了避免併發,防止競爭。核心提供了一組同步方法來提供對共享資料的保護。我們的重點不是介紹這些方法的詳細用法,而是強調為什麼使用這些方法和它們之間的差別。linux使用的同步機制可以說從2.0到2.6以來不斷發展完善。從最初的原子操作,到後來的訊號量,從大核心鎖到今天...