2016-05-02 4 views
1

iOSデバイスのARMプロセッサは、メモリ書き込みの順序付けを強制しないと報告されています。つまり、あるプロセッサがデータ構造体または配列を書き込み、その後有効なフラグを更新すると、別のプロセッサは、データがメモリに到達する前に更新された有効フラグを見て、ゴミを読み込む可能性があります。これは、フラグ変数が小さく(原子サイズ)、volatile宣言されていても当てはまります。メモリ障壁は、IOS ARMの弱いメモリ書き込み順序を解決するには?

いくつかのARMメモリバリア命令、組み込み関数、同等の呼び出しでコンパイルするようにXcodeに指示する方法はありますか(データが同じメモリ上の他のプロセッサから見えるように)チップ)の有効なフラグの更新が発行される前に?

これは、リアルタイムコールバックのロックを取ることが許可されていないリアルタイムコード用です。

答えて

2

必要なものがすべて含まれるlibkern/OSAtomic.hを見てください。

最新のCおよびC++標準のサポートを見てください。それはiOSでも同様に動作します。

+0

ありがとうございました。これは、1つのコールコールOSMemoryBarrier()のように見えます。スウィフトコードから直接。 – hotpaw2

+1

しかし、現在の2.x SwiftコンパイラがOSAtomicメモリバリアを並べ替えることが保証されないため、信頼性が低くなります。したがって、現在の解決策は、コードブロック内にいくつかの連続した保証が必要なコードブロック全体を含むCまたはObjective Cコードを呼び出し、そこで必要なメモリバリアを挿入することです。 – hotpaw2

関連する問題