答案 0 :(得分:2)
STM可以构建在许多不同的同步原语之上,但CAS经常使用,因为它是最简单,最轻量级的选项,不会施加太多不必要的语义约束。
但是,使用CAS操作的只是比使用等执行CAS操作的东西更快。
但它们有不同的用途。 CAS允许您以原子方式更新一些 select 数据类型,STM通常可用于任意类型。 STM为你提供了更大的事务范围的原子性(如果你的事务修改了4个不同的变量,所有4个都被提交为相同的原子操作。一个CAS只会原子地更新一个对象),它给出了隔离和一致性保证CAS不存在。
最终,你无法比较两者。这就像比较车轮和汽车。是的,轮子更小更轻,但这是因为它不能提供与汽车相同的功能。
答案 1 :(得分:1)
如果我直接使用CAS而不是使用这些实现怎么办?
你可以这样做,但对于大多数问题来说它太低了。下降到CAS就像在装配中写下所有东西 - 当然,你可以做到,但这并不能很好地利用你的时间。
挑战在于找到更准确地匹配问题抽象程度的东西,而不是计算机。
显然,在底层,任何软件TM都必须根据硬件TM或原子锁定操作来实现。回滚和避免碰撞的附加语义可以单独完成。如果您只需要原子比较和交换,那么STM比您需要的更多。下拉并使用互斥体或sempaphore,或者更接近CAS指令的其他共享内存抽象。