我读过很多帖子说比较和交换保证原子性,但是我仍然无法理解它是如何做到的。这是比较和交换的一般伪代码:
int CAS(int *ptr,int oldvalue,int newvalue)
{
int temp = *ptr;
if(*ptr == oldvalue)
*ptr = newvalue
return temp;
}
这如何保证原子性?例如,如果我使用它来实现互斥锁,
void lock(int *mutex)
{
while(!CAS(mutex, 0 , 1));
}
这如何防止 2 个线程同时获取互斥锁?任何指针将不胜感激。