嵌入式 自旋鎖 互斥鎖 讀寫鎖 遞迴鎖

2021-09-22 22:08:45 字數 579 閱讀 4332

互斥鎖(mutexlock):

最常使用於執行緒同步的鎖;標記用來保證在任一時刻,只能有乙個執行緒訪問該物件,同一執行緒多次加鎖操作會造成死鎖;臨界區和互斥量都可用來實現此鎖,通常情況下鎖操作失敗會將該執行緒睡眠等待鎖釋放時被喚醒

自旋鎖(spinlock):

同樣用來標記只能有乙個執行緒訪問該物件,在同一執行緒多次加鎖操作會造成死鎖;使用硬體提供的swap指令或test_and_set指令實現;同互斥鎖不同的是在鎖操作需要等待的時候並不是睡眠等待喚醒,而是迴圈檢測保持者已經釋放了鎖,這樣做的好處是節省了執行緒從睡眠狀態到喚醒之間核心會產生的消耗,在加鎖時間短暫的環境下這點會提高很大效率

讀寫鎖(rwlock):

遞迴鎖(recursivelock):

嚴格上講遞迴鎖只是互斥鎖的乙個特例,同樣只能有乙個執行緒訪問該物件,但允許同乙個執行緒在未釋放其擁有的鎖時反覆對該鎖進行加鎖操作; windows下的臨界區預設是支援遞迴鎖的,而linux下的互斥量則需要設定引數pthread_mutex_recursive_np,預設則是不支援

Linux 互斥鎖 遞迴鎖 自旋鎖 讀寫鎖

在多執行緒中,我們經常會要用到鎖,那麼,鎖是什麼,我們為什麼要用到鎖?回到問題的本質,我們在什麼場景下會用到鎖?鎖是針對程式中的臨界資源,也就是公共資源的,當我們有兩個或多個執行緒同時對乙個臨界資源操作的時候,為了保證共享資料操作的完整性,我們要為這些公共資源加鎖。在linux中常見的鎖主要有互斥鎖...

網路程式設計 自旋鎖 互斥鎖 讀寫鎖 遞迴鎖

自旋鎖 互斥鎖 讀寫鎖 遞迴鎖 自旋鎖 互斥鎖 1.自旋鎖不會睡眠,互斥鎖會睡眠,因此自旋鎖效率高於互斥鎖。自旋鎖比較適用於鎖使用者保持鎖時間比較短的情況 2.自旋鎖消耗cpu 由於一直查詢,所以自旋鎖一直占用cpu,互斥鎖不會,自旋鎖導致cpu使用效率低 3.自旋鎖容易造成死鎖 比如遞迴呼叫 遞迴...

互斥鎖 遞迴鎖 讀寫鎖和自旋鎖區別

共享資源的使用是互斥的,即乙個執行緒獲得資源的使用權後就會將改資源加鎖,使用完後會將其解鎖,所以在使用過程中有其它執行緒想要獲取該資源的鎖,那麼它就會被阻塞陷入睡眠狀態,直到該資源被解鎖才會別喚醒,如果被阻塞的資源不止乙個,那麼它們都會被喚醒,但是獲得資源使用權的是第乙個被喚醒的執行緒,其它執行緒又...