スレッド間でデータを共有し、最後のユーザーがデータを使い終わったときに自動的に削除したいと考えています。これは、ほとんどの場合、セグメントで使用boost::interprocess::shared_ptr
するとboost::fixed_managed_shared_memory
機能するようですが、常にではありません。
では、boost::interprocess::shared_ptr
スレッド (およびインタープロセス) は安全ですか?
固定アドレスで共有メモリを使用している場合 (これは 64 ビット (まあ、48 ビット) アドレス空間では問題ないと確信しています)、通常のboost::shared_ptr
(これはスレッドセーフ) 代わりに?
明確化:
私が使用するポインター型は plainvoid*
です (私の共有メモリーは固定アドレスにマップされています)。
スレッドセーフの問題は、参照カウントに関するものです。つまり、異なるプロセスで同時に同じものへの共有ポインタをコピー/破棄することが許可されているかどうかです。異なるスレッドで同じ共有ポインタにアクセスしないでください。また、ポインティにアクセスしないでください。