原子變數的操作

2021-06-07 21:29:46 字數 854 閱讀 4521

原子操作,顧名思義,就是說像原子一樣不可再細分。乙個操作是原子操作,意思就是說這個操作是以原子的方式被執行,要一口氣執行完,執行過程不能夠被os的其他行為打斷,是乙個整體的過程,在其執行過程中,os的其它行為是插不進來的。

原子整數操作的使用:

常見的用途是計數器,因為計數器是乙個很簡單的操作,所以無需複雜的鎖機制;

能使用原子操作的地方,盡量不使用複雜的鎖機制;

下面舉例說明原子操作的用法:

定義乙個atomic_c型別的資料很簡單,還可以定義時給它設定初值:

(1) atomic_t u;                     /*定義 u*/

(2) atomic_t v = atomic_init(0)     /*定義 v 並把它初始化為0*/

對其操作:

(1) atomic_set(&v,4)                /* v = 4 ( 原子地)*/

(2) atomic_add(2,&v)                /* v = v + 2 = 6 (原子地) */

(3) atomic_inc(&v)                   /* v = v + 1 =7(原子地)*/

如果需要將atomic_t轉換成int型,可以使用atomic_read()來完成:

printk(「%d\n」,atomic_read(&v));    /* 會列印7*/

原子整數操作最常見的用途就是實現計數器。使用複雜的鎖機制來保護乙個單純的計數器是很笨拙的,所以,開發者最好使用atomic_inc()和atomic_dec()這兩個相對來說輕便一點的操作。

有的時候需要共享的資源可能知識乙個簡單的整型數值,例如在驅動程式開發中,需要對包含乙個

原子變數與原子操作

1.原子操作的速度要快於臨界區,event,互斥量,如果多個執行緒同時寫乙個變數時,最方便的就是原子操作。原子操作函式,解決多執行緒安全 2.原子變數也是為了解決執行緒衝突問題,如果兩個執行緒同時訪問同乙個變數,乙個執行緒改變了這個變數,另乙個執行緒就會出現一些bug。3.release和debug...

併發控制之原子變數操作

原子變數操作是一種在執行過程中不會被打斷的操作,它是linux核心提供的一種簡單的同步機制。原子操作需要硬體的支撐,是架構相關的。原子操作包括原子整型操作和原子位操作。linux核心提供了乙個原子整型變數,其定義在include asm atomic.h檔案中,該變數的定義為 typedef str...

原子性,原子操作

舉個例子 a想要從自己的帳戶中轉1000塊錢到b的帳戶裡。那個從a開始轉帳,到轉帳結束的這乙個過程,稱之為乙個事務。在這個事務裡,要做如下操作 從a的帳戶中減去1000塊錢。如果a的帳戶原來有3000塊錢,現在就變成2000塊錢了。在b的帳戶裡加1000塊錢。如果b的帳戶如果原來有2000塊錢,現在...