0

共有メモリ内のプロパティとして大きな配列を含むカスタム クラスを取得するサンプルはありますか? 同じプロセス内の異なるスレッドからの読み取り/書き込みアクセスが必要です。コンパイル時のクラス インスタンスのサイズは不明です。私の場合、OpenMP ソリューションは許可されていません。32 API またはネイティブ C++ 機能を獲得するだけです。

4

1 に答える 1

2

これには共有メモリは必要ありません。1 つの c++ プロセス内のすべてのメモリは暗黙的に共有され、そのアドレスを知っている限り、すべてのスレッドからアクセスできます。

本当に必要なのは、スレッドが適切な順序で (競合状態なしで) オブジェクトにアクセスするための同期です。オブジェクトは、いわゆる モニターパターンを実装する必要があります。

C ++では、このように手動でこれを行います

  • put (win32 API) ミューテックスをオブジェクトのメンバーとして
  • すべてのメソッドの最初でこのミューテックスをロックします
  • メソッドの終了時にロックを解除します。例外を処理するには、スタックでロッカー オブジェクトを使用することをお勧めします。

(一部の言語では、同期されたメソッドまたはオブジェクトを宣言するだけで済みますが、C++ ではこれを手動で行います)

または、「リーダー/ライター」などの高レベルの並列パターンを使用します。メッセージパッシングを好む

于 2013-05-18T23:17:13.787 に答える