比较和交换与测试和设置
Posted
技术标签:
【中文标题】比较和交换与测试和设置【英文标题】:compare and swap vs test and set 【发布时间】:2011-04-09 05:30:21 【问题描述】:有人可以向我解释一下上述操作在多线程中的工作原理和区别吗?
【问题讨论】:
【参考方案1】:测试和设置对位进行操作,比较和交换对 32 位字段进行操作。
z/TPF 系统倾向于使用测试和设置 (TS) 指令,因为锁定指示符通常是设置用于控制对系统代码关键区域的访问的位。 测试和设置 (TS) 指令比比较和交换 (CS) 指令需要更少的寄存器,并且需要更少的执行时间,因为只需要设置一个字节。
而且,我从以下地址找到这些材料:http://www.ibm.com/support/knowledgecenter/SSB23S_1.1.0.13/gtpc3/tasinst.html
您可以通过名为“现代操作系统,第 2 章”的书了解更多关于 TSL 的信息...
【讨论】:
【参考方案2】:test-and-set
修改内存位置的内容并将其旧值作为单个原子操作返回。
compare-and-swap
原子地将内存位置的内容与给定值进行比较,并且仅当它们相同时将该内存位置的内容修改为给定的新值。
用粗体标出的区别。
【讨论】:
既然compare-and-swap
比test-and-set
做更多的工作,它是否比test-and-set
花费更多时间?
@arunmoezhi,这取决于实现。
能否详细说明。我对此感兴趣的原因是如果测试和设置更快,那么我可以修改我的算法以使用它而不是比较和交换
这里有一些代码示例:cs.cornell.edu/courses/cs4410/2015su/lectures/lec06-spin.html以上是关于比较和交换与测试和设置的主要内容,如果未能解决你的问题,请参考以下文章