我已经阅读了一些帖子,说比较和交换保证原子性,但是我仍然无法得到它是怎么回事.这是比较和交换的通用伪代码:
int CAS(int *ptr,int oldvalue,int newvalue)
{
int temp = *ptr;
if(*ptr == oldvalue)
*ptr = newvalue
return temp;
}
Run Code Online (Sandbox Code Playgroud)
这如何保证原子性?例如,如果我使用它来实现互斥锁,
void lock(int *mutex)
{
while(!CAS(mutex, 0 , 1));
}
Run Code Online (Sandbox Code Playgroud)
这如何防止2个线程同时获取互斥锁?任何指针都会非常感激.