比较并交换与测试并设置的区别

35

有人能解释一下多线程中上述操作的工作原理和区别吗?

2个回答

61

test-and-set 操作可以在单个原子操作中修改内存位置的内容并返回其旧值。

compare-and-swap 操作会比较内存位置的内容与给定值,仅当它们相同时,才会修改该内存位置的内容为给定的新值。

加粗部分是两者之间的区别。


由于“比较并交换”所做的工作比“测试并设置”更多,它是否需要比“测试并设置”花费更多的时间? - arunmoezhi
@arunmoezhi,这取决于实现方式。 - Kirill V. Lyadvinsky
能否详细说明一下?我对这个感兴趣的原因是,如果 test-and-set 比 compare-and-swap 更快,那么我可以修改我的算法使用它。 - arunmoezhi
1
以下是一些代码示例:https://www.cs.cornell.edu/courses/cs4410/2015su/lectures/lec06-spin.html - yyFred

11

测试与设置是在位上操作,比较与交换是在32位字段上进行操作。

z/TPF系统倾向于使用测试和设置(TS)指令,因为通常情况下,锁定指示器是设置为控制对系统代码关键区域访问的位。 测试和设置(TS)指令需要比比较和交换(CS)指令更少的寄存器,并且执行时间更短,因为只需要设置一个单字节。

我从这里找到了这些材料。

您可以通过阅读《现代操作系统》的第2章来了解有关TSL的更多内容...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接