複数のスレッドのユースケースでのブースト共有ポインターでの参照カウントについてのコメントを投稿したいと思います。コメントは、「ブースト共有ポインタ参照カウントに競合状態はありますか?」という質問に答えることです。</ p>
私の簡単な答えは、少なくともほとんどの主流コンパイラのブースト1.35の後は、「いいえ」です。boost / detail/shared_count.hppで定義されている「add_ref_copy」と呼ばれるブースト実装。この関数は、個々のコンパイラに対して定義された対応するアトミック関数を呼び出します。たとえば、Windowsバージョンは「BOOST_INTERLOCKED_INCREMENT」を呼び出して、アトミックな方法でカウントをインクリメントします(詳細はdetail \ sp_counted_base_w32.hppを参照)。また、X86用のLinux gccはatomic_increment(…)を呼び出します(詳細については、detail \ sp_counted_base_gcc_x86.hppを参照してください)。個々のコンパイラは、参照カウントが効率的に更新されるように、スレッドセーフメカニズムを実装しました。一部のコードはアセンブリでさえ書かれています。
今、私の簡単な答えには注意点があります。複数のスレッドセーフな参照カウントのために、コンパイラがブーストの祝福されたリストに含まれていることを確認する必要があります。よくわからない場合は、ブーストを駆動してpthreadライブラリを使用して参照カウントをアトミックに更新する「BOOST_SP_USE_PTHREADS」を定義できます(pthreadソリューションにboost / detail / sp_counted_base_pt.hppを含めることにより)。