自旋鎖
自旋鎖與互斥鎖很相似,在訪問共享資源之前對(duì)自旋鎖進(jìn)行上鎖,在訪問完成后釋放自旋鎖(解鎖);事實(shí)上,從實(shí)現(xiàn)方式上來(lái)說,互斥鎖是基于自旋鎖來(lái)實(shí)現(xiàn)的,所以自旋鎖相較于互斥鎖更加底層。
自旋鎖與互斥鎖之間的區(qū)別:
- 實(shí)現(xiàn)方式上的區(qū)別:互斥鎖是基于自旋鎖而實(shí)現(xiàn)的,所以自旋鎖相較于互斥鎖更加底層;
- 開銷上的區(qū)別:獲取不到互斥鎖會(huì)陷入阻塞狀態(tài)(休眠),直到獲取到鎖時(shí)被喚醒;而獲取不到自旋鎖會(huì)在原地“自旋”,直到獲取到鎖;休眠與喚醒開銷是很大的,所以互斥鎖的開銷要遠(yuǎn)高于自旋鎖、自旋鎖的效率遠(yuǎn)高于互斥鎖;但如果長(zhǎng)時(shí)間的“自旋”等待,會(huì)使得 CPU 使用效率降低,故自旋鎖不適用于等待時(shí)間比較長(zhǎng)的情況。
- 使用場(chǎng)景的區(qū)別:自旋鎖在用戶態(tài)應(yīng)用程序中使用的比較少,通常在內(nèi)核代碼中使用比較多;因?yàn)樽孕i可以在中斷服務(wù)函數(shù)中使用,而互斥鎖則不行,在執(zhí)行中斷服務(wù)函數(shù)時(shí)要求不能休眠、不能被搶占(內(nèi)核中使用自旋鎖會(huì)自動(dòng)禁止搶占),一旦休眠意味著執(zhí)行中斷服務(wù)函數(shù)時(shí)主動(dòng)交出了CPU 使用權(quán),休眠結(jié)束時(shí)無(wú)法返回到中斷服務(wù)函數(shù)中,這樣就會(huì)導(dǎo)致死鎖!
初始化和銷毀自旋鎖
#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);
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
Linux
+關(guān)注
關(guān)注
87文章
11123瀏覽量
207896 -
線程
+關(guān)注
關(guān)注
0文章
501瀏覽量
19580
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
深度解析自旋鎖及自旋鎖的實(shí)現(xiàn)方案
入場(chǎng)券自旋鎖和MCS自旋鎖都屬于排隊(duì)自旋鎖(queued spinlock),進(jìn)程按照申請(qǐng)
發(fā)表于 09-19 11:39
?4263次閱讀
Linux高級(jí)編程---互斥鎖
在Linux系統(tǒng)里,有很多鎖的應(yīng)用,包括互斥鎖,文件鎖,讀寫鎖等等,信號(hào)量其實(shí)也應(yīng)該是鎖的一種。
發(fā)表于 01-13 10:07
信號(hào)量、互斥鎖、自旋鎖
信號(hào)量、互斥鎖、自旋鎖http://bbs.edu118.com/forum.php?mod=viewthread&tid=488&fromuid=231(出處: 信盈達(dá)IT技術(shù)社
發(fā)表于 08-29 09:48
你知道自旋鎖和互斥鎖區(qū)別?
的應(yīng)用就是用Pthreads提供的鎖機(jī)制(lock)來(lái)對(duì)多個(gè)線程之間共 享的臨界區(qū)(Critical Section)進(jìn)行保護(hù)(另一種常用的同步機(jī)制是barrier)。
發(fā)表于 05-14 17:44
?3244次閱讀
信號(hào)量和自旋鎖
信號(hào)量時(shí),不可以再持有自旋鎖。信號(hào)量基本使用形式為:static DECLARE_MUTEX(mr_sem);//聲明互斥信號(hào)量if(down_interruptible(&mr_sem
發(fā)表于 04-02 14:43
?776次閱讀
Linux 自旋鎖spinlock
背景 由于在多處理器環(huán)境中某些資源的有限性,有時(shí)需要互斥訪問(mutual exclusion),這時(shí)候就需要引入鎖的概念,只有獲取了鎖的任務(wù)才能夠?qū)Y源進(jìn)行訪問,由于多線程的核心是CPU的時(shí)間分片
深入了解互斥鎖、條件變量、讀寫鎖以及自旋鎖
C++11只包含其中的部分。接下來(lái)我主要通過pthread的API來(lái)展開本文。 mutex(互斥量) mutex(mutual exclusive)即互斥量(互斥體)。也便是常說的互斥
自旋鎖的發(fā)展歷史與使用方法
自旋鎖是Linux內(nèi)核里最常用的鎖之一,自旋鎖的概念很簡(jiǎn)單,就是如果加鎖失敗在等鎖時(shí)是使用休眠等
使用Linux自旋鎖實(shí)現(xiàn)互斥點(diǎn)燈
自旋鎖最多只能被一個(gè)可執(zhí)行線程持有。如果一個(gè)線程試圖獲得一個(gè)已經(jīng)被持有的自旋鎖,那么該線程將循環(huán)等待,然后不斷的判斷鎖是否能夠被成功獲取,直
Linux互斥鎖的作用 互斥鎖是什么
1、互斥鎖 互斥鎖(mutex),在訪問共享資源之前對(duì)互斥鎖進(jìn)行上鎖,在訪問完成后釋放
互斥鎖、條件變量、讀寫鎖、自旋鎖及信號(hào)量介紹
一、互斥鎖(同步) 在多任務(wù)操作系統(tǒng)中,同時(shí)運(yùn)行的多個(gè)任務(wù)可能都需要使用同一種資源。這個(gè)過程有點(diǎn)類似于,公司部門里,我在使用著打印機(jī)打印東西的同時(shí)(還沒有打印完),別人剛好也在此刻使用打印機(jī)打印東西
自旋鎖和互斥鎖的使用場(chǎng)景是什么
自旋鎖和互斥鎖是兩種常見的同步機(jī)制,它們?cè)诙嗑€程編程中被廣泛使用。在本文中,我們將介紹自旋鎖和
互斥鎖和自旋鎖的實(shí)現(xiàn)原理
互斥鎖和自旋鎖是操作系統(tǒng)中常用的同步機(jī)制,用于控制對(duì)共享資源的訪問,以避免多個(gè)線程或進(jìn)程同時(shí)訪問同一資源,從而引發(fā)數(shù)據(jù)不一致或競(jìng)爭(zhēng)條件等問題。 互斥
評(píng)論