1 /* 2 * Copyright (C) 2015-2017 Alibaba Group Holding Limited 3 */ 4 5 #ifndef K_ATOMIC_H 6 #define K_ATOMIC_H 7 8 #ifdef __cplusplus 9 extern "C" { 10 #endif 11 12 typedef unsigned int atomic_t; 13 typedef atomic_t atomic_val_t; 14 15 extern atomic_val_t rhino_atomic_add(atomic_t *target, atomic_val_t value); 16 extern atomic_val_t rhino_atomic_sub(atomic_t *target, atomic_val_t value); 17 extern atomic_val_t rhino_atomic_inc(atomic_t *target); 18 extern atomic_val_t rhino_atomic_dec(atomic_t *target); 19 extern atomic_val_t rhino_atomic_set(atomic_t *target, atomic_val_t value); 20 extern atomic_val_t rhino_atomic_get(const atomic_t *target); 21 extern atomic_val_t rhino_atomic_or(atomic_t *target, atomic_val_t value); 22 extern atomic_val_t rhino_atomic_xor(atomic_t *target, atomic_val_t value); 23 extern atomic_val_t rhino_atomic_and(atomic_t *target, atomic_val_t value); 24 extern atomic_val_t rhino_atomic_nand(atomic_t *target, atomic_val_t value); 25 extern atomic_val_t rhino_atomic_clear(atomic_t *target); 26 extern int rhino_atomic_cas(atomic_t *target, atomic_val_t old_value, 27 atomic_val_t new_value); 28 29 #ifdef __cplusplus 30 } 31 #endif 32 33 #endif /* K_ATOMIC_H */ 34 35