- ベストアンサー
C++のシングルトンオブジェクトに対するポインタについて
C++のシングルトンオブジェクトに対するポインタについて 只今C++を勉強中(すいませんが初心者)です。 タイトルの通り、C++のシングルトンオブジェクトに対するポインタについて 調べているのですが、web、手持ちの書籍上(もちろん入門系です)では確認 できなかったので、ここで質問をさせていただいております。 シングルトンオブジェクトのアドレスを保持しているポインタを、マルチスレッド 環境で利用する場合ってどの様な動きになるのでしょうか? 例えば同時アクセスされた瞬間、オブジェクト(ポインタ)は共有されるのか、 それともキューが発生してしまうのか、が知りたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
マルチスレッド環境で利用する場合には、スレッドセーフなクラス設計を行う必要があります。 「シングルトン」を名乗るからには、異なるスレッド間でもオブジェクトは共有しなければなりません。 そうなるように、オブジェクトの生成には注意が必要です。詳しくは「Double Checked Locking Pattern」について調べてみてください。 この場合「シングルトンではこうなる」というような他力本願ではなく、 ・スレッド間で同じオブジェクト(ポインタ)を共有する ・(ほぼ)同時にアクセスした場合、先にアクセスした方がロックし、後にアクセスした側は先のアクセスが終わるまで待たされる(キューのような動作になる) ように「設計する」必要があるのです。
お礼
なるほど。 一瞬でイメージができました。 明快な回答をありがとうございました。