1

来自关于 Read-Copy-Update 的维基百科文章

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

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

4

2 回答 2

1

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

如果您使用低级 (C/C++) 进行编码,请使用宏来包装基于操作的操作。然后,如果您确定特定的硬件配置将在本机上运行,​​您始终可以#define 将这些操作变得微不足道,就像您没有保护自己一样。

但一般来说,正确总比快速好。

于 2009-10-19T02:30:02.063 回答
1

好吧,如果您使用 size <= databus size 的原始类型并且数据正确对齐,那么这是真的。因此,它更多地取决于您的代码,然后取决于现代 cpu。

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

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

于 2009-10-19T03:02:16.910 回答