参考:
https://www.cnblogs.com/FateTHarlaown/p/8919235.html
https://bbs.huaweicloud.com/blogs/146370
#ifdef __x86_64__
#define CAS32(ptr, val_old, val_new)({ char ret; __asm__ __volatile__("lock; cmpxchgl %2,%0; setz %1": "+m"(*ptr), "=q"(ret): "r"(val_new),"a"(val_old): "memory"); ret;})
#else
char CAS32(volatile int *ptr, int val_old, int val_new)
{
return __atomic_compare_exchange_n(ptr, &val_old, val_new, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
}
#endif
原理就是对变量赋值时 先检查内存中的变量是否发生变化,如果没变化则改变该变量,如果有变化则不修改
这样就能保证多线程和多进程修改 共享变量