stm实现问题

时间:2011-05-14 10:09:56

标签: java multicore cas stm

嘿伙计们,
在某些时候,我认为这些stm实现(我使用了一点点的多元宇宙......),被过度炒作了。因为在某些时候他们使用CAS来提供操作的原子性。如果我直接使用CAS而不是使用这些实现怎么办?虽然我同意这些实现也可能提供其他功能,但如果我可以获得相同的性能并且没有很多功能可以使用,那么我应该直接使用CAS而不是使用多节或scala或其他实现吗?登记/> 嘿伙计们,当你使用那些stm实现而不是CAS时,你注意到了任何性能提升?因为当我运行时(在多元文档和在atomicInteger JAVA 中给出)atomicCounter,我在atomicInteger中获得比在多元宇宙中更好的性能。那么它是_ stm的基础是CAS吗? _

2 个答案:

答案 0 :(得分:2)

STM可以构建在许多不同的同步原语之上,但CAS经常使用,因为它是最简单,最轻量级的选项,不会施加太多不必要的语义约束。

但是,使用CAS操作的只是比使用执行CAS操作的东西更快。

但它们有不同的用途。 CAS允许您以原子方式更新一些 select 数据类型,STM通常可用于任意类型。 STM为你提供了更大的事务范围的原子性(如果你的事务修改了4个不同的变量,所有4个都被提交为相同的原子操作。一个CAS只会原子地更新一个对象),它给出了隔离和一致性保证CAS不存在。

最终,你无法比较两者。这就像比较车轮和汽车。是的,轮子更小更轻,但这是因为它不能提供与汽车相同的功能。

答案 1 :(得分:1)

  

如果我直接使用CAS而不是使用这些实现怎么办?

你可以这样做,但对于大多数问题来说它太低了。下降到CAS就像在装配中写下所有东西 - 当然,你可以做到,但这并不能很好地利用你的时间。

挑战在于找到更准确地匹配问题抽象程度的东西,而不是计算机。

显然,在底层,任何软件TM都必须根据硬件TM或原子锁定操作来实现。回滚和避免碰撞的附加语义可以单独完成。如果您只需要原子比较和交换,那么STM比您需要的更多。下拉并使用互斥体或sempaphore,或者更接近CAS指令的其他共享内存抽象。