在iOS上,有两个类似的功能,OSAtomicAdd32和OSAtomicAdd32Barrier.我想知道你什么时候需要Barrier变种.
拆卸后,它们是:
_OSAtomicAdd32: ldxr w8,[x1] add w8,w8,w0 stxr w9,[x1] cbnz w9,_OSAtomicAdd32 mov x0,x8 ret lr _OSAtomicAdd32Barrier: ldaxr w8,w0 stlxr w9,_OSAtomicAdd32Barrier mov x0,x8 ret lr
在哪种情况下,您需要后者的Load-Acquire / Store-Release语义? LDXR / STXR指令可以重新排序吗?如果可以,原子更新是否有可能在没有障碍的情况下“丢失”?从我读过的内容来看,似乎不会发生这种情况,如果是真的,那么为什么你需要Barrier变体呢?也许只有你也碰巧需要DMB用于其他目的?
谢谢!