小编Sta*_*her的帖子

比较和交换如何工作

我已经阅读了一些帖子,说比较和交换保证原子性,但是我仍然无法得到它是怎么回事.这是比较和交换的通用伪代码:

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个线程同时获取互斥锁?任何指针都会非常感激.

c multithreading mutex compare-and-swap

17
推荐指数
2
解决办法
3万
查看次数

标签 统计

c ×1

compare-and-swap ×1

multithreading ×1

mutex ×1