Atomic example, used to inspect assembly code..
This commit is contained in:
@@ -0,0 +1,50 @@
|
|||||||
|
#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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user