70 lines
950 B
C
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;
|
|
}
|
|
|