特定の方法でメモリを解釈する複数のプロセス間で共有メモリがあります。元:
DataBlock {
int counter;
double value1;
double ... }
私が望むのは、カウンターがアトミックに更新/インクリメントされることです。そして、そのアドレスでメモリ解放が行われるようにします。たとえば、共有メモリを使用していない場合は、次のようになります
std::atomic<int> counter;
atomic_store(counter, newvalue, std::memory_order_release); // perform release operation on the affected memory location making the write visible to other threads
ランダムなメモリ位置でこれを達成するにはどうすればよいですか (上記の DataBlock カウンターであると解釈されます)。アーキテクチャ (x86 Linux) の要求に応じてアドレスが整列されていることを保証できます。
- 更新をアトミックにする - どうやって?(つまり、atomicupdate(addr, newvalue))
- マルチコアのメモリ同期 - (つまり、memorysync(addr)) - 私が見ることができる唯一の方法は、 std::atomic_thread_fence(std::memory_order_release) を使用することです - しかし、これは「すべてのアトミックストアとリラックスしたアトミックストアのメモリ同期順序を確立します」 - それは私にとってはやり過ぎです-カウンターの場所を同期させたいだけです。どんな考えでも感謝します。