sig_atomic_t

sig_atomic_t這個類型是定義在signal.h檔案中。

基本介紹

  • 中文名:sig_atomic_t
  • 類型:檔案
  • 原型:typedef int
  •  使用方法:原子變數自減1
Linux核心中的原子操作 atomic_t,
當把變數聲明為該類型會保證該變數在使用或賦值時, 無論是在32位還是64位的機器上都能保證操作是原子的, 它會根據機器的類型自動適應。
這個類型是定義在signal.h檔案中。下面來說說這個類型。
在處理信號(signal)的時候,有時對於一些變數的訪問希望不會被中斷,無論是硬體中斷還是軟體中斷,這就要求訪問或改變這些變數需要在計算機的一條指令內完成。通常情況下,int類型的變數通常是原子訪問的,也可以認為 sig_atomic_t就是int類型的數據,因為對這些變數要求一條指令完成,所以sig_atomic_t不可能是結構體,只會是數字類型。
在linux里這樣定義:
typedef int __sig_atomic_t;
另外gnu c的文檔也說比int短的類型通常也是具有原子性的,例如short類型。同時,指針(地址)類型也一定是原子性的。 該類型在所有gnu c庫支持的系統和支持posix的系統中都有定義。

Linux核心中的原子操作 atomic_t

原型:
typedef struct {
volatile int counter;
} atomic_t;
1 聲明,定義並初始化原子變數
atomic_t isopen = ATOMIC_INIT(1);
2 使用方法
原子變數自減1,並測試是否為0,如果為0,返回true,否則返回false
if( !atomic_dec_and_test(&isopen) ) {
atomic_inc(&isopen); //加1操作
return -EBUSY;
}
3 釋放
減1操作
atomic_dec(&isopen);

相關詞條

熱門詞條

聯絡我們