原子操作: 原子操作是由編譯器來保證的,保證乙個執行緒對資料的操作不會被其他執行緒打斷。當執行緒正在對乙個變數操作而這個操作過程不想被其他執行緒打斷時,可以用原子操作,原子操作結構體(atomic_t)
原子操作缺點:會阻塞優先順序很高的執行緒。
自旋鎖:當乙個執行緒在讀寫乙個共享資源時,加上自旋鎖,其他想要讀寫這個共享資源的執行緒就會一直處於忙等狀態,迴圈檢測保持者已經釋放了鎖,互斥量阻塞後休眠讓出cpu,而自旋鎖阻塞後不會讓出cpu,會一直忙等待,直到得到鎖。(重點:忙等、讀寫均會鎖住)
讀寫鎖:cpu內的乙個結構體(rwlock_t),本質上是乙個有符號整數(原子變數),初始值為2的整數次冪。當有執行緒對共享資源申請寫操作時,先判斷該值是否為初始值,如果是,則可以寫入,讀寫鎖變為0;如果不是,則無法寫入。當有執行緒讀取該共享資源時,先判斷該值減1是否為負,如果是,則說明有執行緒在寫入,讀取失敗,如果不為0,則可以讀取,讀取時此值加1,防止讀取過程中有執行緒寫入。
讀寫鎖缺點:會造成寫飢餓。(當乙個執行緒長時間讀,無法寫入)
順序鎖:針對讀寫鎖的缺點,在讀取時可以寫入,不必等待。只有寫之間會鎖住。
以上自旋鎖、讀寫鎖、順序鎖、等待鎖的執行緒均處於忙等。會占用cpu,但實時性更強。如果不想讓執行緒忙等,可以使用訊號量。
linux同步機制
一.併發控制 1 自旋鎖 得不到資源,會原地打轉,直到獲得資源為止 定義自旋鎖 spinlock t spin 初始化自旋鎖 spin lock init lock 獲得自旋鎖 spin lock lock 獲得自旋鎖,如果能立即獲得,則馬上返回,否則自旋在那裡,直到該自旋鎖的保持者釋放 spin ...
linux同步機制
1 自旋鎖 獲得自旋鎖之後禁止核心搶占,但可以被中斷上半部打斷。執行於中斷上下文 單cpu不可搶占核心 空操作 單cpu可搶占核心 禁止核心搶占,不發生自旋 多cpu可搶占核心 禁止核心搶占 自旋 2 互斥鎖 核心可以搶占,可以被其他程序搶占,執行於程序上下文 3 讀寫鎖 4 順序鎖 對讀寫鎖的一種...
linux 2 6同步機制
作業系統的同步機制是老話題了,不過技術的東西放久不用了就容易忘記,在這裡就訊號量為大家整理一下思緒。在linux系統中,訊號量是一種可以睡眠的鎖。如果程序a希望占有乙個正在被程序b使用的訊號量時,程序a會被推入等待佇列,然後睡眠。直到程序b將持有的訊號量釋放,處於等待佇列中的程序a才會被喚醒,並獲得...