Files
libucore/test/atomic.c
T
2015-01-03 02:11:12 +01:00

70 lines
950 B
C

#include <stdio.h>
#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;
}