当多线程仍然是现代CPU的问题时,是部分更新的值吗?

时间:2009-10-19 02:21:37

标签: multithreading architecture locking atomic wikipedia

来自the Wikipedia article on Read-Copy-Update

  

与读者同时运行删除阶段是安全的原因是现代CPU的语义保证读者可以看到旧版本或新版本的数据结构而不是部分更新的引用。

这适用于所有现代CPU(ARM,x86,PPC等)吗?它可能在未来发生变化吗?只要您不介意再次获得旧值(这可能不是许多应用程序的问题 - 基本上对于任何可以使用的应用程序而言,永远不需要支付执行锁定负载的成本似乎非常好读 - 复制 - 更新)。

2 个答案:

答案 0 :(得分:1)

假设您的硬件支持未经检查的更新仍然是不安全的。

如果您使用低级(C / C ++)进行编码,请使用宏来包装基础操作。然后,如果您确定某个特定的硬件配置可以原生工作,那么您总是可以#define这些操作是微不足道的,就像您没有保护自己一样。

但通常情况下,做对比快速更好。

答案 1 :(得分:1)

如果您使用大小为< = databus size的基本类型并且数据正确对齐,那么它就是真的。所以它更依赖于你的代码然后在现代的CPU上。

您可以假设这将继续存在,因为如果可以部分更新指针,则无法编写垃圾收集器。并且在每个单指针访问周围使用锁定前缀会完全破坏性能。

所以是的,文章是正确的(再次假设大小和对齐)。

相关问题