/* gcc內置原子操做 */ #include <stdio.h> /* 知識補充: gcc 4.1.2版本以後,對X86或X86_64支持內置原子操做。即不須要引入第三方庫(如pthread)的鎖保護 ,便可對一、二、四、8字節的數值或指針類型,進行原子加/減/與/或/異或等操做 原子操做的本質目的是:再多線程場景下,不加鎖的前提下,安全的實現對數值類型進行 加/減/與/或/異 操做 API type __sync_fetch_and_add (type *ptr, type value, ...) //將value加到*ptr上,結果更新到*ptr,並返回操做以前*ptr的值 type __sync_fetch_and_sub (type *ptr, type value, ...) // 從*ptr減去value,結果更新到*ptr,並返回操做以前*ptr的值 type __sync_fetch_and_or (type *ptr, type value, ...) // 將*ptr與value相或,結果更新到*ptr, 並返回操做以前*ptr的值 type __sync_fetch_and_and (type *ptr, type value, ...) // 將*ptr與value相與,結果更新到*ptr,並返回操做以前*ptr的值 type __sync_fetch_and_xor (type *ptr, type value, ...) // 將*ptr與value異或,結果更新到*ptr,並返回操做以前*ptr的值 type __sync_fetch_and_nand (type *ptr, type value, ...) // 將*ptr取反後,與value相與,結果更新到*ptr,並返回操做以前*ptr的值 type __sync_add_and_fetch (type *ptr, type value, ...) // 將value加到*ptr上,結果更新到*ptr,並返回操做以後新*ptr的值 type __sync_sub_and_fetch (type *ptr, type value, ...) // 從*ptr減去value,結果更新到*ptr,並返回操做以後新*ptr的值 type __sync_or_and_fetch (type *ptr, type value, ...) // 將*ptr與value相或, 結果更新到*ptr,並返回操做以後新*ptr的值 type __sync_and_and_fetch (type *ptr, type value, ...) // 將*ptr與value相與,結果更新到*ptr,並返回操做以後新*ptr的值 type __sync_xor_and_fetch (type *ptr, type value, ...) // 將*ptr與value異或,結果更新到*ptr,並返回操做以後新*ptr的值 type __sync_nand_and_fetch (type *ptr, type value, ...) // 將*ptr取反後,與value相與,結果更新到*ptr,並返回操做以後新*ptr的值 bool __sync_bool_compare_and_swap (type *ptr, type oldval type newval, ...) // 比較*ptr與oldval的值,若是二者相等,則將newval更新到*ptr並返回true type __sync_val_compare_and_swap (type *ptr, type oldval type newval, ...) // 比較*ptr與oldval的值,若是二者相等,則將newval更新到*ptr並返回操做以前*ptr的值 __sync_synchronize (...) // 發出完整內存柵欄 type __sync_lock_test_and_set (type *ptr, type value, ...) // 將value寫入*ptr,對*ptr加鎖,並返回操做以前*ptr的值。即,try spinlock語義 void __sync_lock_release (type *ptr, ...) // 將0寫入到*ptr,並對*ptr解鎖。即,unlock spinlock語義 */ int main() { return 0; }