6

現在、openMP を使用して、マルチコア ノードで実行されるコードを記述しています。openMP には、ロックが取得されたときに異なるコアで実行されているスレッド間でメモリが同期されることを保証する特定のメモリ モデルがあります。

openMP の代わりにC++11 コンストラクト ( std::threadwith std::mutexand std::lock) を使用することを検討しています (柔軟性が高いため)。ここで、プロセッサ間のメモリ同期が保証されているかどうか、またはどのように保証されているか疑問に思っています。そうでない場合、どうすれば強制できますか?

4

1 に答える 1

10

std::mutex標準は、§30.4.1.2[thread.mutex.requirements.mutex]/6-25で、の同期について次のことを保証します。

式 m.lock() は整形式であり、次のセマンティクスを持つ必要があります

同期: 同じオブジェクトに対する以前の unlock() 操作は、この操作と同期します。

そして、同様に、

式 m.unlock() は整形式であり、次のセマンティクスを持つ必要があります

同期: この操作は、同じオブジェクトの所有権を取得する後続のロック操作と同期します。

(「同期」は $1.10 で説明されている特定の用語ですが、C++ Concurrency In Actionを読むと理解しやすくなります)

于 2012-06-08T13:52:28.613 に答える