Muduo原始碼分析(2) 原子類

2021-08-04 10:26:54 字數 1002 閱讀 5115

// 如果*ptr == oldval,就將newval寫入*ptr,然後返回*ptr

// 否則直接返回*ptr

__sync_val_compare_and_swap(type *ptr, type oldval type newval, ...)

// 返回修改前的值

__sync_fetch_and_add(type *ptr, type value, ...)

// 將*ptr設為value並返回*ptr操作之前的值。

__sync_lock_test_and_set(type *ptr, type value, ...)

相對應的gcc>=4.7的版本中:

__atomic_load_n

__atomic_fetch_add

__atomic_store_n

template

t>

class

atomicintegert : noncopyable

t get()

t getandset(t

newvalue)

t addandget(t

x)

t incrementandget()

t decrementandget()

void add(t

x)

void increment()

void decrement()

private:

volatile t value_;

};typedef atomicintegert

atomicint32;

typedef atomicintegert

atomicint64;

變數value使用volatile修飾:

volatile修飾的變數,系統總是重新到改變量的記憶體重新讀取資料,而不是去暫存器中讀取該變數的備份資料,去除編譯器對改該變數的優化處理。

muduo 原始碼分析(前言0)

前言0 個人高效能 高併發linux伺服器端程式設計 網路程式設計 比較感興趣,自己寫過一些簡單的tcp通訊程式,用程序池實現簡單cgi伺服器,用執行緒池實現簡單web伺服器。熟悉c 程式語言,但是沒有用c 參與過乙個專案,所以想尋找乙個開源專案,用c 自己實現乙個相對完整的網路庫,所以選擇了mud...

muduo原始碼分析執行緒池

執行緒池的實現原理 在併發程式設計中,由於執行緒的反覆建立於銷毀是非常消耗時間的,在存在大量的執行緒的建立於銷毀的程式中,我們可以事先建立出一部分執行緒,然後管理這些執行緒去處理我們的任務,這樣可以節省一大部分反覆建立與銷毀的時間開銷,執行緒池的好處這裡不多說了,看一下muduo 網路庫對執行緒池的...

muduo原始碼筆記 base Timestamp

timestamp表示的是utc時間,最小可表示微秒 us 資料成員microsecondssinceepoch 使用int64 t long long 表示物件,因此作者建議將此值按值傳遞,這樣可以直接存放在暫存器中,提高訪問速度。ifndef muduo base timestamp h def...