原子操作atomic

來源:互聯網
上載者:User

 

1.原子操作的是在執行過程中不會被別的代碼路徑所中斷的操作
2.當共用資源是位或整型變數,是一個完整的加鎖體制對於一個簡單的整數值看來過分了. 對於這樣的情況,核心提供了一個原子整數類型稱為 atomic_t, 定義在 <asm/atomic.h>
--------------------------------------------
整型原子操作
1.設定原子變數的值
void atomic_set(atomic_t *v,int i);/*設定原子變數的值為i*/
atomic_t v = ATOMIC_INIT(0);/*定義原子變數v並初始化為0*/
2.擷取原子變數
atomic_read(atomic_t *v);返回 v 的當前值
3.原子變數加減
void atomic_add(int i, atomic_t *v);由 v 指向的原子變數加 i.傳回值是 void
void atomic_sub(int i, atomic_t *v);從 *v 減去 i
4.原子變數自增/自減
void atomic_inc(atomic_t *v);
void atomic_dec(atomic_t *v);
遞增或遞減一個原子變數
5.操作並測試
int atomic_inc_and_test(atomic_t *v);
int atomic_dec_and_test(atomic_t *v);
int atomic_sub_and_test(int i, atomic_t *v);
進行一個特定的操作並且測試結果; 如果, 在操作後, 原子值是 0, 那麼
傳回值是真; 否則, 它是假. 注意沒有 atomic_add_and_test.
6.操作並返回
int atomic_add_return(int i, atomic_t *v);
int atomic_sub_return(int i, atomic_t *v);
int atomic_inc_return(atomic_t *v);
int atomic_dec_return(atomic_t *v);
加整數變數 i 到 v. 如果結果是負值傳回值是真, 否則為假
-------------------------------------------------------------
位操作
原子位操作非常快, 它們使用單個機器指令來進行操作, 而在任何時候低層
平台做的時候不用禁止中斷. 函數是體系依賴的並且在 <asm/bitops.h> 中聲明.
它們保證是原子的, 即便在 SMP 電腦上, 並且對於跨處理器保持一致是有用的.
1.設定位
void set_bit(nr,void *addr)
設定addr地址的第nr位,將位寫為1
2.void clear_bit(nr, void *addr);
清除addr地址的第nr位,將位寫為0
3.改變位
void change_bit(nr, void *addr);翻轉這個位
4.測試位
test_bit(nr, void *addr);
這個函數是唯一一個不需要是原子的位操作; 它簡單地返回這個位的當前值.
返回addr地址的第nr位
5.測試並操作位
int test_and_set_bit(nr, void *addr);
int test_and_clear_bit(nr, void *addr);
int test_and_change_bit(nr, void *addr);
原子地動作如同前面列出的, 除了它們還返回這個位以前的值.

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.