spin_lock & mutex_lock的差別?

來源:互聯網
上載者:User

標籤:style   color   使用   資料   art   問題   

本文由該問題引入到核心鎖的討論,歸納例如以下
為什麼須要核心鎖?多核處理器下,會存在多個進程處於核心態的情況,而在核心態下,進程是能夠訪問全部核心資料的,因此要對共用資料進行保護,即相互排斥處理
有哪些核心鎖機制?(1)原子操作atomic_t資料類型,atomic_inc(atomic_t *v)將v加1原子操作比普通操作效率要低,因此必要時才使用,且不能與普通操作混合使用假設是單核處理器,則原子操作與普通操作同樣(2)自旋鎖spinlock_t資料類型,spin_lock(&lock)和spin_unlock(&lock)是加鎖和解鎖等待解鎖的進程將重複檢查鎖是否釋放,而不會進入睡眠狀態(忙等待),所以經常使用於短期保護某段代碼同一時候,持有自旋鎖的進程也不同意睡眠,不然會造成死結——由於睡眠可能造成持有鎖的進程被又一次調度,而再次申請自己已持有的鎖假設是單核處理器,則自旋鎖定義為空白操作,由於簡單的關閉中斷就可以實現相互排斥(3)訊號量與相互排斥量struct semaphore資料類型,down(struct semaphore * sem)和up(struct semaphore * sem)是佔用和釋放struct mutex資料類型,mutex_lock(struct mutex *lock)和mutex_unlock(struct mutex *lock)是加鎖和解鎖競爭訊號量與相互排斥量時須要進行進程睡眠和喚醒,代價較高,所以不適於短期代碼保護,適用於保護較長的臨界區相互排斥量與訊號量的差別?(轉載但找不到原文出處)(1)相互排斥量用於線程的相互排斥,訊號線用於線程的同步這是相互排斥量和訊號量的根本差別,也就是相互排斥和同步之間的差別相互排斥:是指某一資源同一時候僅僅同意一個訪問者對其進行訪問,具有唯一性和排它性。但相互排斥無法限制訪問者對資源的訪問順序,即訪問是無序的同步:是指在相互排斥的基礎上(大多數情況),通過其他機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了相互排斥,特別是全部寫入資源的情況必然是相互排斥的。少數情況是指能夠同意多個訪問者同一時候訪問資源(2)相互排斥量值僅僅能為0/1,訊號量值能夠為非負整數也就是說,一個相互排斥量僅僅能用於一個資源的相互排斥訪問,它不能實現多個資源的多線程相互排斥問題。訊號量能夠實現多個同類資源的多線程相互排斥和同步。當訊號量為單值訊號量是,也能夠完畢一個資源的相互排斥訪問(3)相互排斥量的加鎖和解鎖必須由同一線程分別相應使用,訊號量能夠由一個線程釋放,還有一個線程得到

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.