ライターバイアスのリーダー/ライターモデルで2つ(またはそれ以上)のプロセス間でデータのチャンクを効果的に共有するための最良の方法を探しています。
私の現在のテストはboost::interprocess
です。いくつか作成managed_shared_memory
し、共有メモリに格納されているプロセス間ミューテックスを使用して、データチャンクへのアクセスをロックしようとしています。
ただし、sharable_lock
リーダーとupgradable_lock
ライターで使用している場合でも、クライアントは書き込み操作中にフラグメント化された値をブロックする代わりに読み取ります。単一のプロセスでスレッド間で同様のリーダー/ライターのセットアップを行っている間、私はupgrade_to_unique_lock
この問題を解決するために使用しました。しかし、私はそれにboost::interprocess
相当するものを見つけていません。存在しますか?
サーバー(ライター):
while (1) {
// Get upgrade lock on the mutex
upgradable_lock <MutexType> lock(myMutex);
// Need 'upgrade_to_unique_lock' here so shared readers will block until
// write operation is finished.
// Write values here
}
クライアント(リーダー)
while (1)
{
// Get shared access
sharable_lock <MutexType> lock(myMutex);
// Read p1's data here -- occasionally invalid!
}
手元にあるより大きな問題はこれだと思います。プロセス間ミューテックスは、ライターに偏ったセットアップでプロセス間の共有メモリにアクセスするための適切な方法でさえありますか?
注:Boost1.44.0を使用する