互斥鎖和自旋鎖的實現(xiàn)原理 自旋鎖的自旋鎖-原理?
自旋鎖的自旋鎖-原理?自旋鎖自旋鎖類似于互斥鎖,只是自旋鎖不會導致調(diào)用者睡眠。如果一個自旋鎖被另一個執(zhí)行單元持有,調(diào)用者總是在那里循環(huán),看它是否被持有自旋鎖的持有者是否已經(jīng)釋放了鎖,因此得名“self
自旋鎖的自旋鎖-原理?
自旋鎖
自旋鎖類似于互斥鎖,只是自旋鎖不會導致調(diào)用者睡眠。如果一個自旋鎖被另一個執(zhí)行單元持有,調(diào)用者總是在那里循環(huán),看它是否被持有
自旋鎖的持有者是否已經(jīng)釋放了鎖,因此得名“self spin”。它的功能是解決資源的互斥使用問題。由于自旋鎖不會導致調(diào)用者睡眠,所以自旋鎖的效率比互斥鎖高很多。雖然它的效率高于互斥鎖,但它也有一些缺點:1。自旋鎖總是占用CPU。它運行所有的時間-自旋沒有得到鎖,所以它占用CPU。如果不能在短時間內(nèi)獲得鎖,無疑會降低CPU效率。
2. 使用自旋鎖時,可能會導致死鎖。遞歸調(diào)用時,可能導致死鎖。調(diào)用其他一些函數(shù)也可能導致死鎖,例如copyuutouuser()、copyufromuuser()、kmalloc()等,因此使用自旋鎖要謹慎。只有當內(nèi)核是搶占式或SMP時,才真正需要自旋鎖。在單CPU非搶占式內(nèi)核中,自旋鎖的操作為空。旋轉(zhuǎn)鎖適用于鎖用戶在短時間內(nèi)保持鎖。
互斥:線程將切換上下文,搶占CPU并將信號從休眠發(fā)送到運行。
自旋鎖:線程總是在運行(lock> unlock),死循環(huán)檢測鎖標志位,機制并不復雜。
互斥鎖是一種睡眠等待鎖。例如,在雙核機器上,有兩個線程(線程a和線程b),分別在core0和
core1上運行。假設線程a要通過pthreadmutexLock操作來獲得關鍵區(qū)域的鎖,此時鎖被線程B持有,那么線程a將被阻塞
在X86平臺上,自旋鎖主要通過處理器的鎖指令前綴來實現(xiàn)。當一個線程的指令訪問內(nèi)存時,另一個線程的指令不能訪問內(nèi)存。因此,在spinlock的初始化階段,lock變量中的值K被分配給1。鎖定時,使用lock decl(x)指令將變量更改為互斥的0,并詢問結(jié)果0是否分配給EFLAGS寄存器的相應位。只有鎖定的線程會導致0,而其他線程不會。然后,通過判斷相應的位來判斷是否加鎖。否則,循環(huán)將執(zhí)行l(wèi)ock decl(x),直到添加它為止。其中x是變量的地址。這是GCC的at&t語法的匯編。
spinlock自旋鎖是如何實現(xiàn)的?
讓我們談談個人觀點。
原因1-->原因2-->原因n-->問題。
找到問題的第一個原因。這個(個體)被理解為問題的本質(zhì)。
這個[前提]或[核心假設]是推論的基礎。!主要前提[原理,理論,基礎]或[核心假設]!例如:看圖片!屬性(自然,關系)-概念(內(nèi)涵,定義,擴展,除法)-判斷-假設-推理-示范。
基本邏輯概念是一個人邏輯思維的基本品質(zhì)。幫助自己從結(jié)果中引導或推斷出特定的結(jié)果起著基礎性的作用。
這是他們的聯(lián)系信息。