首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stm实现问题

stm实现问题
EN

Stack Overflow用户
提问于 2011-05-14 10:09:56
回答 2查看 452关注 0票数 2

嘿伙计们,

在某种程度上,我认为这些stm实现(多重宇宙,我用了一点点.),被过度炒作了。因为在某种程度上,他们使用CAS,这为他们提供了操作的原子性。如果我直接使用CAS而不是使用这些实现怎么办?虽然我同意这些实现也可能提供其他特性,但是如果我可以获得相同的性能,并且没有太多的特性可以使用,那么我应该直接使用CAS而不是使用multi、scala或其他实现吗?

嘿,伙计们,你们有没有注意到在使用那些stm实现时比CAS有什么性能提高?自从我运行(在multiverse文档和atomicInteger JAVA中给出) atomicCounter以来,在atomicInteger中获得的性能要比在multiverse中要好。那么,它是否类似于__the碱基是中国科学院?__

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-07 09:18:54

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

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

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

最终,你无法将两者进行比较。这就像把轮子比作汽车一样。是的,车轮更小,重量更轻,但这是因为它不提供与汽车相同的功能。

票数 2
EN

Stack Overflow用户

发布于 2011-06-22 13:46:18

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

你可以这么做,但对大多数问题来说,它的水平太低了。放弃CAS就像把所有东西都写在程序集中--当然,你可以做到,但这不是很好地利用你的时间。

我们面临的挑战是找到更准确地符合问题抽象程度的东西,而不是计算机。

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

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

https://stackoverflow.com/questions/6001128

复制
相关文章

相似问题

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