自旋鎖
自旋鎖與互斥鎖很相似,在訪問共享資源之前對自旋鎖進行上鎖,在訪問完成后釋放自旋鎖(解鎖);事實上,從實現方式上來說,互斥鎖是基于自旋鎖來實現的,所以自旋鎖相較于互斥鎖更加底層。
自旋鎖與互斥鎖之間的區別:
- 實現方式上的區別:互斥鎖是基于自旋鎖而實現的,所以自旋鎖相較于互斥鎖更加底層;
- 開銷上的區別:獲取不到互斥鎖會陷入阻塞狀態(休眠),直到獲取到鎖時被喚醒;而獲取不到自旋鎖會在原地“自旋”,直到獲取到鎖;休眠與喚醒開銷是很大的,所以互斥鎖的開銷要遠高于自旋鎖、自旋鎖的效率遠高于互斥鎖;但如果長時間的“自旋”等待,會使得 CPU 使用效率降低,故自旋鎖不適用于等待時間比較長的情況。
- 使用場景的區別:自旋鎖在用戶態應用程序中使用的比較少,通常在內核代碼中使用比較多;因為自旋鎖可以在中斷服務函數中使用,而互斥鎖則不行,在執行中斷服務函數時要求不能休眠、不能被搶占(內核中使用自旋鎖會自動禁止搶占),一旦休眠意味著執行中斷服務函數時主動交出了CPU 使用權,休眠結束時無法返回到中斷服務函數中,這樣就會導致死鎖!
初始化和銷毀自旋鎖
#include < pthread.h >
int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
int pthread_spin_destroy(pthread_spinlock_t *lock);
加鎖和解鎖
#include < pthread.h >
int pthread_spin_lock(pthread_spinlock_t *lock);
int pthread_spin_trylock(pthread_spinlock_t *lock);
int pthread_spin_unlock(pthread_spinlock_t *lock);
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
Linux
+關注
關注
87文章
11304瀏覽量
209524 -
線程
+關注
關注
0文章
504瀏覽量
19685
發布評論請先 登錄
相關推薦
信號量、互斥鎖、自旋鎖
信號量、互斥鎖、自旋鎖http://bbs.edu118.com/forum.php?mod=viewthread&tid=488&fromuid=231(出處: 信盈達IT技術社
發表于 08-29 09:48
你知道自旋鎖和互斥鎖區別?
的應用就是用Pthreads提供的鎖機制(lock)來對多個線程之間共 享的臨界區(Critical Section)進行保護(另一種常用的同步機制是barrier)。
發表于 05-14 17:44
?3284次閱讀
信號量和自旋鎖
信號量時,不可以再持有自旋鎖。信號量基本使用形式為:static DECLARE_MUTEX(mr_sem);//聲明互斥信號量if(down_interruptible(&mr_sem
發表于 04-02 14:43
?807次閱讀
Linux 自旋鎖spinlock
背景 由于在多處理器環境中某些資源的有限性,有時需要互斥訪問(mutual exclusion),這時候就需要引入鎖的概念,只有獲取了鎖的任務才能夠對資源進行訪問,由于多線程的核心是CPU的時間分片
深入了解互斥鎖、條件變量、讀寫鎖以及自旋鎖
C++11只包含其中的部分。接下來我主要通過pthread的API來展開本文。 mutex(互斥量) mutex(mutual exclusive)即互斥量(互斥體)。也便是常說的互斥
互斥鎖、條件變量、讀寫鎖、自旋鎖及信號量介紹
一、互斥鎖(同步) 在多任務操作系統中,同時運行的多個任務可能都需要使用同一種資源。這個過程有點類似于,公司部門里,我在使用著打印機打印東西的同時(還沒有打印完),別人剛好也在此刻使用打印機打印東西
互斥鎖和自旋鎖的實現原理
互斥鎖和自旋鎖是操作系統中常用的同步機制,用于控制對共享資源的訪問,以避免多個線程或進程同時訪問同一資源,從而引發數據不一致或競爭條件等問題。 互斥
評論