首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析compare_and_swap

解析compare_and_swap
EN

Stack Overflow用户
提问于 2013-09-25 13:19:04
回答 1查看 137关注 0票数 0

我正在尝试解析compare_and_swap,因为老实说,我什么都不懂。

代码语言:javascript
复制
do { while (compare_and_swap(&lock, 0, 1) != 0)
; /* do nothing */
/* critical section */
lock = 0;
/* remainder section */
} while (true);



int compare and swap(int *value, int expected, int new_value) {
int temp = *value;
if (*value == expected)
*value = new_value;
return temp;
}

让我们假设lock设置为0;

1:比较和交换返回0,lock设置为1,运行临界区,lock设置为0。

冲洗并重复

我不知道我是否正确地解析了它,但是有没有可能比较和交换比test_and_set少一个周期来做同样的事情(确保线程的并发性)?

EN

回答 1

Stack Overflow用户

发布于 2013-09-25 16:08:55

很难判断您在这里实际请求的是什么,但这不是compare_and_swap的正确实现,因为它不是原子的。

正确的原子实现通常会利用比较并交换CPU指令。例如在x86 LOCK CMPXCHG中。但是,使用系统库提供的用于执行比较和交换的函数(如Windows API中的InterlockedCompareExchange )或C++11中的std::atomic<>的比较交换函数可能要好得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18996794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档