• ベストアンサー

C++のシングルトンオブジェクトに対するポインタについて

C++のシングルトンオブジェクトに対するポインタについて 只今C++を勉強中(すいませんが初心者)です。 タイトルの通り、C++のシングルトンオブジェクトに対するポインタについて 調べているのですが、web、手持ちの書籍上(もちろん入門系です)では確認 できなかったので、ここで質問をさせていただいております。 シングルトンオブジェクトのアドレスを保持しているポインタを、マルチスレッド 環境で利用する場合ってどの様な動きになるのでしょうか? 例えば同時アクセスされた瞬間、オブジェクト(ポインタ)は共有されるのか、 それともキューが発生してしまうのか、が知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

マルチスレッド環境で利用する場合には、スレッドセーフなクラス設計を行う必要があります。 「シングルトン」を名乗るからには、異なるスレッド間でもオブジェクトは共有しなければなりません。 そうなるように、オブジェクトの生成には注意が必要です。詳しくは「Double Checked Locking Pattern」について調べてみてください。 この場合「シングルトンではこうなる」というような他力本願ではなく、 ・スレッド間で同じオブジェクト(ポインタ)を共有する ・(ほぼ)同時にアクセスした場合、先にアクセスした方がロックし、後にアクセスした側は先のアクセスが終わるまで待たされる(キューのような動作になる) ように「設計する」必要があるのです。

1chako
質問者

お礼

なるほど。 一瞬でイメージができました。 明快な回答をありがとうございました。

関連するQ&A