マルチプロセッサシステムの共有メモリxに変数があります。
void MyFunction(volatile int* x) {
if (*x != 0) {
// do something
}
}
他のプロセス(おそらく異なるプロセッサ上)は、__sync_bool_compare_and_swapなどのgcc組み込みアトミック操作を使用してxに書き込みます。
xが最終的に新しい値で更新されるまでに少し時間がかかることがある、キャッシュの同時実行性の問題が発生していると思います。
そのようなものが存在する場合、私が欲しいのは一種のatomic_compare(スワップなし)ですか?または「アトミックリード」。これを行うための最速の方法は何ですか?(ミューテックス、ロックなどを回避します)
ありがとう
編集:
ややハックな回避策は、__sync_val_compare_and_swapを、決して使用できないことがわかっている値で使用することであることに気づきました。それで問題は解決しますか?(よりクリーンな方法はありますか?)