InterlockedCompareExchange
Windows では、gcc と同様__sync_val_compare_and_swap
にポインターを使用するため、共有メモリ ブロックを指すなど、任意のアドレスをそれらの関数に渡すことができます。
x86 以外のアーキテクチャでは、正確性のためにメモリ アライメントを確保する必要がある場合があり、x86 (およびその他のアーキテクチャ) では、パフォーマンスのためにキャッシュ ラインのアライメントを確保したい場合がありますが、正確性は問題にはなりません (-> x86LOCK
プレフィックス) 。 .
コード内のプラットフォームに依存するもの (Windows VC++ と GCC) を取り除こうとして、C++11atomic_compare_exchange_weak
とその仲間を調べました。しかし、それらはすべて type の変数で機能しますstd::atomic<T>*
。
C++11 のアトミック関数で任意のポインターを使用する方法はありますか? std::atomic への単純なキャストがこれを解決するようには見えません。