X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=libatomic.h;h=f24b5fbff35a10a3dcc2c88beca108ecb9093e75;hb=583f164ae7fe3d5abefe77b9d10cfb5f1be45569;hp=f861445cb0789b547a708150eb598547d59e78d3;hpb=060e439b9c99f4fd89060acd44913b103d983b45;p=c11tester.git diff --git a/libatomic.h b/libatomic.h index f861445c..f24b5fbf 100644 --- a/libatomic.h +++ b/libatomic.h @@ -1,22 +1,37 @@ +/** @file libatomic.h + * @brief Basic atomic operations to be exposed to user program. + */ + #ifndef __LIBATOMIC_H__ #define __LIBATOMIC_H__ -typedef enum memory_order { - memory_order_relaxed, - memory_order_consume, - memory_order_acquire, - memory_order_release, - memory_order_acq_rel, - memory_order_seq_cst -} memory_order; +#ifdef __cplusplus +extern "C" { +#endif + + typedef enum memory_order { + memory_order_relaxed, + memory_order_consume, + memory_order_acquire, + memory_order_release, + memory_order_acq_rel, + memory_order_seq_cst + } memory_order; -typedef struct atomic_object { -} atomic_int; + typedef struct atomic_object { + int value; + } atomic_int; -void atomic_store_explicit(struct atomic_object *obj, int value, memory_order order); + void atomic_store_explicit(struct atomic_object *obj, int value, memory_order order); #define atomic_store(A, B) atomic_store_explicit((A), (B), memory_order_seq_cst) -int atomic_load_explicit(struct atomic_object *obj, memory_order order); + int atomic_load_explicit(struct atomic_object *obj, memory_order order); #define atomic_load(A) atomic_load_explicit((A), memory_order_seq_cst) + void atomic_init(struct atomic_object *obj, int value); + +#ifdef __cplusplus +} +#endif + #endif /* __LIBATOMIC_H__ */