開源力量學習筆記
自旋鎖(spinlock)簡介
自旋鎖是核心的一種同步機制,在同一時刻只能被最多乙個核心任務持有,所以乙個時刻只有乙個執行緒允許存在於臨界區中。
核心可以通過自旋鎖占有某些資源,直到使用完後再釋放鎖。如果該資源已經被其他的任務占有了,那核心會不斷等待,直到獲得該資源。
這點可以應用在多處理機器、或執行在單處理器上的搶占式核心中需要的鎖定服務。
自旋鎖(spinlock)的基本形式api
初始化:
在編譯時定義:define
_spinlock();
在執行時初始化:spin_lock_init();
持有鎖和釋放鎖:
spin_lock();
//臨界區
spin_unlock();
自旋鎖**程式設計示例:
#include
#include
<
linux
/kthread.h
>
#include
<
linux
/delay.h
>
module_license
("gpl");
module_author
("chen");
module_description
("the module is only used for test.");
//static define_spinlock(threads_lock)
;static spinlock_t threads_lock
;static void threads_lock_init
(void
)struct our_data
;static struct our_data my_data
;static void show_my_data
(void
)#define max_kthread 10
static struct task_struct
*threads
[max_kthread];
static
intthread_do
(void
*data
)return 0;}
static
intcreate_threads
(void
)return 0;}
static void cleanup_threads
(void
)static __init
intminit
(void
)static __exit void mfini
(void
)module_init
(minit);
module_exit
(mfini);
執行結果:
chen@ubuntu:~
/mygit
/module
/exam1$ dmesg
[3475
.623885
]call minit.[
3475
.625348
]run ..
.[3475
.625363
]run ..
.[3475
.625375
]run ..
.[3475
.625386
]run ..
.[3475
.625397
]run ..
.[3475
.625546
]run ..
.[3475
.625562
]run ..
.[3475
.625574
]run ..
.[3475
.625594
]run ..
.[3475
.627184
]run ..
.[3480
.215762
]call mfini.[
3480
.353601
]count1 2899
,count2 28990
0 給主人留下些什麼吧!~~
java鎖 自旋鎖
什麼是自旋鎖?所謂自旋鎖是指不會引起呼叫者睡眠,若鎖資源被其他執行緒占有,則會迴圈檢查鎖資源的佔有者是否已經釋放鎖。總結下來自旋鎖就是原子操作 自迴圈 如何實現自旋鎖?自旋鎖的原理是通過cas實現,其中cas是比較並交換,本身是使用它的原子性的compareandset方法。cas 操作中包含三個運...
自旋鎖以及可重入自旋鎖
首先是簡單的自旋鎖 實現 package org.cc.concur public class mylock private boolean islocked false public synchronized void lock throws interruptedexception islock...
樂觀鎖 悲觀鎖 自旋鎖
三 樂觀鎖和悲觀鎖的使用場景 四 自旋鎖 總是假設最壞的情況,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會阻塞直到它拿到鎖 共享資源每次只給乙個執行緒使用,其它執行緒阻塞,用完後再把資源轉讓給其它執行緒 傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比...