#include #include "ucore/atomic.h" UC_ATOMIC(unsigned int) i; unsigned int get_i(void) { return UC_ATOMIC_GET(&i); } unsigned int inc_i(void) { return UC_ATOMIC_INC(&i); } unsigned int dec_i(void) { return UC_ATOMIC_DEC(&i); } unsigned int sub_i(unsigned int v) { return UC_ATOMIC_SUB(&i, v); } unsigned int add_i(unsigned int v) { return UC_ATOMIC_ADD(&i, v); } unsigned int get_i_membar() { unsigned int r; UC_MEM_BARRIER(); r = i; UC_MEM_BARRIER(); return r; } unsigned int get_i_compbar() { unsigned int r; UC_COMPILER_BARRIER(); r = i; UC_COMPILER_BARRIER(); return r; } int main(int argc, char *argv[]) { printf("i: %u\n", get_i()); inc_i(); printf("i: %u\n", get_i()); inc_i(); dec_i(); printf("i: %u\n", get_i()); add_i(100); printf("i: %u\n", get_i()); sub_i(50); printf("i: %u\n", get_i_membar()); return 0; }