【问题标题】:Memory barriers to solve iOS ARM weak memory write ordering?解决iOS ARM弱内存写入顺序的内存障碍?
【发布时间】:2016-08-27 09:08:58
【问题描述】:

据报道,iOS 设备中的 ARM 处理器不会强制执行内存写入的顺序。这意味着如果一个处理器写入一个数据结构或数组,然后更新一个有效标志,另一个处理器可以在数据到达内存之前看到更新的有效标志,从而读取垃圾。即使标志变量很小(原子大小)并且声明为 volatile,也是如此。

是否有任何方法(在 Swift 或 Objective C 中)告诉 Xcode 在某些 ARM 内存屏障指令、内在函数或等效调用中进行编译,以保证将数据写入内存(对同一芯片上的其他处理器可见) ) 在发出后续有效标志更新之前?

这适用于不允许在实时回调中锁定的实时代码。

【问题讨论】:

    标签: ios objective-c swift memory multiprocessing


    【解决方案1】:

    查看 libkern/OSAtomic.h,它应该包含您需要的所有内容。

    或者查看最新的 C 和 C++ 标准支持;这也适用于iOS。

    【讨论】:

    • 谢谢。看起来像是一次调用 OSMemoryBarrier();直接来自 Swift 代码。
    • 然而,似乎无法保证当前的 2.x Swift 编译器不会重新排序 OSAtomic 内存屏障,从而使其不可靠。因此,当前的解决方案可能是调用包含整个代码块的 C 或 Objective C 代码,其中需要一些顺序保证,并在那里插入任何需要的内存屏障。
    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 2011-07-04
    • 2019-09-07
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    相关资源
    最近更新 更多