atomic add return 函式分析

2021-06-26 11:54:48 字數 659 閱讀 1623

這個函式實現原子的加操作,並同步。

那麼它是如何實現的呢?如何實現在多處理器的情況下,實現同步呢?

static inline int atomic_add_return(int i, atomic_t *v)

smp_mb() 記憶體屏障,具體是什麼 待分析。

先看這個彙編**吧!

__asm__ __volatile__ 宣告嵌入彙編  並且編譯器不進行優化。

下面的這些**翻譯過來後應該是

1:    ldrex result v->counter  //將v->counter的資料存放到result裡面 設定標記「

exclusive」。

add result,result,i;  //result+=i

strex tmp,result,v->counter //   檢查標記「exclusive」 是否被設定,如果被設定 清除,然後將result 寫會v->counter ,並將tmp寫0,否則tmp寫1 結束

teq tmp,#0//檢查tmp是否為0 

bne 1b//如果tmp不等於0 跳轉1  

下面我們分析如何實現同步的,假設執行緒1執行到strex命令  排程到執行緒2 執行緒2執行到strex後 發現exclusive 已經被清除,tmp寫1 然後會重新跳轉到1: 執行。這樣實現同步。

python的函式分類 Python函式分類及操作

1 定義函式 2 def func1 3 testing 4 print in the func1 5 return 0 7 定義過程 8 def func2 9 testing2 10 print in the func2 12 呼叫函式 13 x func1 15 呼叫過程 16 y func2...

linux socket select 函式分析

linux socket select 函式分析 include void fd clr fd,fd set fdset void fd copy fd set fdset orig,fd set fdset copy intfd isset fd,fd set fdset void fd set ...

函式分享 每日PHP函式分享 2021 2 4

array chunk將乙個陣列分隔成多個 array chunk array array,int size,bool preserve keys false array將乙個陣列分隔成多個陣列,其中每個陣列的單元數目有size決定。最後乙個陣列的單元資料可能會少於size個。引數 array 需要...