相對應的gcc>=4.7的版本中:// 如果*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, ...)
__atomic_load_n
__atomic_fetch_add
__atomic_store_n
變數value使用volatile修飾: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;
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...