解决iOS ARM弱内存写入排序的内存屏障?

4
iOS设备中的ARM处理器据报道不执行内存写入的排序。这意味着,如果一个处理器写入数据结构或数组,然后更新有效标记,另一个处理器在数据到达内存之前就可能看到更新的有效标记,因此读取垃圾数据。即使标志变量很小(原子大小)并且声明为易失性,也是如此。
有没有办法(在Swift或Objective C中)告诉Xcode编译一些ARM内存屏障指令、内置函数或等效调用,以保证数据被写入内存(对同一芯片上的其他处理器可见)在发出后续的有效标记更新之前?
这适用于实时代码,在实时回调中禁止获取锁定。
1个回答

3

请查看libkern/OSAtomic.h,它应该包含你所需的一切。

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


谢谢。看起来可以直接从Swift代码中调用OSMemoryBarrier(); - hotpaw2
3
然而,目前的2.x Swift编译器并没有保证不会重新排列OSAtomic内存屏障,因此可能使其变得不可靠。因此,当前的解决方案可能是调用包含需要一些顺序保证的整个代码块的C或Objective C代码,并在其中插入任何必需的内存屏障。 - hotpaw2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接