原子變數的使用總結

2021-08-25 02:33:34 字數 1966 閱讀 6721

#include
// 核心態

typedef struct tagsessionfwdstatistics

session_fwd_statistics_s;

// 使用者態

typedef struct tagsessionfwdstatistics

session_fwd_statistics_s;

對於32位的結構體使用會有變化。

// 核心態

0 == atomic_read(&(pstsessionmdc->stsessstat.sttotalrelationnum))

// 使用者態

0 == atomic32_read(&(pstsessionmdc->stsessstat.sttotalrelationnum))

// 核心態

atomic_inc(&pstcfgdata->aststatfailcnt[session_stat_inv6][enstatfailtype]);

//使用者態

atomic32_inc(&pstcfgdata->aststatfailcnt[session_stat_inv6][enstatfailtype]);

// 核心態

atomic_dec(&(pstcfg->stsessstat.sttotalsessnum));

// 使用者態

atomic32_dec(&(pstcfg->stsessstat.sttotalsessnum));

// 核心態

atomic_set(&pstsession->stsessionbase.strefcount.stcount, 1);

// 使用者態

atomic32_set(&pstsession->stsessionbase.strefcount.stcount, 1);

// 核心態

atomic_add(1, &pststat->astsessallstatcount[ensessallstattype]);

// 使用者態

atomic32_add(&pststat->astsessallstatcount[ensessallstattype], 1);

減去指定值不再示例

// 核心態

(uint)atomic_inc_return(&pstcfg->stsessstat.sttotalsessnum);

//使用者態

(uint)atomic32_add_return(&pstcfg->stsessstat.sttotalsessnum, 1);

注意函式不同了

// 核心態

atomic_dec_and_test(&pstsession->stsessionbase.strefcount)

// 使用者態

atomic32_dec_and_test(&pstsession->stsessionbase.strefcount)

// 核心態

0 == atomic_inc_not_zero(&pstsessionbase.strefcount.stcount)

// 使用者態

0 == atomic32_add_unless(&pstsession->stsessionbase.strefcount.stcount, 1, 0)

// 核心態

0 == atomic_dec_return(&pstip4lognode->streferencecnt)

// 使用者態

0 == atomic32_sub_return(&pstip4lognode->streferencecnt, 1)

原子變數與原子操作

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

原子變數的操作

原子操作,顧名思義,就是說像原子一樣不可再細分。乙個操作是原子操作,意思就是說這個操作是以原子的方式被執行,要一口氣執行完,執行過程不能夠被os的其他行為打斷,是乙個整體的過程,在其執行過程中,os的其它行為是插不進來的。原子整數操作的使用 常見的用途是計數器,因為計數器是乙個很簡單的操作,所以無需...

原子變數的原理與應用

當多個執行緒併發執行時,由於cpu隨時被搶占,程式的執行就會具有不可 性。cpu還需要處理各種外圍裝置的中斷。這種不可 性會變的更隨機。我們所期望的程式執行結果有可能會變得不可預期。舉例說明 考慮生產者消費者的問題,我們有乙個變數counter,生產者增加conter的值,消費者減少counter的...