【发布时间】:2014-04-15 21:01:24
【问题描述】:
我读过很多帖子说比较和交换保证原子性,但是我仍然无法理解它是如何做到的。这是比较和交换的一般伪代码:
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 个线程同时获取互斥锁?任何指针将不胜感激。
【问题讨论】:
-
当然:
ptr,mutex,NULL... -
不实现自己的互斥锁更安全,而是使用系统中的一些互斥锁,例如 glibc 中的
pthread_mutex_lock/_unlock(在 POSIX 中定义的接口:pubs.opengroup.org/onlinepubs/009695399/functions/…) -
我没有实现自己的互斥锁。只是想举个例子来说明我的意思。
标签: c multithreading mutex compare-and-swap