原子變數

Linux核心中比較常見的一個名詞,是原子操作的基本單位。

描述,舉例,

描述

一般我們在程式中修改一個代碼的值會分為3步:讀取==》 修改 ==》 回寫。在允許多執行緒的程式中而對於某一資源我們只希望有一個執行緒操作它,我會想使用全局變數去作為標記變數。兩個執行緒A、B,當A讀取完該全局變數後正在修改它的值,而這時B進程正在讀取該全局變數,對於B進程而言此全局變數的值和A進程是一樣,這樣A、B都可以正常進行,就與我們的意願相違了,所以我們會想是不是可以定義一個變數,將對一個變數值的讀取、修改、回寫變成一個不可打斷的操作,於是我們就有了原子變數。

舉例

常用原子操作函式舉例:
atomic_t v = ATOMIC_INIT(0); //定義原子變數v並初始化為0
atomic_read(atomic_t *v); //返回原子變數的值
void atomic_inc(atomic_t *v); //原子變數增加1
void atomic_dec(atomic_t *v); //原子變數減少1
int atomic_dec_and_test(atomic_t *v); //自減操作後測試其是否為0,為0則返回true,否則返回false。

相關詞條

熱門詞條

聯絡我們