#include
#include
int main(int argc, char **argv)
{
int i = 10, j = 0;
//先将i的值返回,再将i+1
j = __sync_fetch_and_add(&i, 1);
printf("加:i=%d j=%d ", i, j);
//先将i+1,再将加运算i+1的和返回
i = 10;
j = 0;
j = __sync_add_and_fetch(&i, 1);
printf("i=%d j=%d\n", i, j);
//先将i返回,再将i-1
i = 10;
j = 0;
j = __sync_fetch_and_sub(&i, 1);
printf("减:i=%d j=%d ", i, j);
//先将i-1,再将i-1的差返回
i = 10;
j = 0;
j = __sync_sub_and_fetch(&i, 1);
printf("i=%d j=%d\n", i, j);
//先将i返回,再将i|10
i = 10;
j = 0;
j = __sync_fetch_and_or(&i, 10);
printf("或:i=%d j=%d ", i, j);
//先将i|10,再将i|10的结果返回
i = 10;
j = 0;
j = __sync_or_and_fetch(&i, 10);
printf("i=%d j=%d\n", i, j);
//先将i返回,再将i&5
i = 10;
j = 0;
j = __sync_fetch_and_and(&i, 5);
printf("与:i=%d j=%d ", i, j);
//先将i&5,再将i&5的结果返回
i = 10;
j = 0;
j = __sync_and_and_fetch(&i, 5);
printf("i=%d j=%d\n", i, j);
//先将i返回,再将i^5,异或
i = 10;
j = 0;
j = __sync_fetch_and_xor(&i, 5);
printf("异或:i=%d j=%d ", i, j);
//先将i^5,再将i^5的结果返回
i = 10;
j = 0;
j = __sync_xor_and_fetch(&i, 5);
printf("i=%d j=%d\n", i, j);
//先将i返回,再将先与i&1后非,与非
i = 0;
j = 0;
j = __sync_fetch_and_nand(&i, 0);
printf("与非:i=0x%x j=0x%x ", i, j);
//先将i&i再非,再将结果返回
i = 0;
j = 0;
j = __sync_nand_and_fetch(&i, 1);
printf("i=0x%x j=0x%x\n", i, j);
//如果前面两个参数的值相等,就将第三个参数的值赋值给第一个参数,相等则返回true,否则返回false
i = 12;
bool flag = false;
printf("i=%d ", i);
flag = __sync_bool_compare_and_swap(&i, 1, 123);
if (true == flag)
{
printf("TURE:i=%d\n", i);
}
else
{
printf("FLASE:i=%d\n", i);
}
//如果前面两个参数的值相等,就将第三个参数的值赋值给第一个参数,相等则返回true,否则返回false
i = 12;
printf("i=%d ", i);
flag = __sync_bool_compare_and_swap(&i, 12, 123);
if (true == flag)
{
printf("TURE:i=%d\n", i);
}
else
{
printf("FLASE:i=%d\n", i);
}
//如果前面两个参数的值相等,就将第三个参数的值赋值给第一个参数,返回操作之前的值
i = 12;
j = 0;
printf("i=%d ", i);
j = __sync_val_compare_and_swap(&i, 1, 123);
if (i == j)
{
printf("TURE:i=%d j=%d\n", i, j);
}
else
{
printf("FLASE:i=%d j=%d\n", i, j);
}
//如果前面两个参数的值相等,就将第三个参数的值赋值给第一个参数,相等则返回true,否则返回false
i = 12;
printf("i=%d ", i);
j = __sync_val_compare_and_swap(&i, 12, 123);
if (j == i)
{
printf("TURE:i=%d j=%d\n", i, j);
}
else
{
printf("FLASE:i=%d j=%d\n", i, j);
}
return 0;
}