Singletonの実装について(1)

仕事のはなしです.
自分のところにまわってくる仕事って、とりあえず実装したのだけど
どうも品質が安定しないので調査してほしい、みたいなのが多いです.
最近自分が行ったのは、とあるライブラリを使用しているのだけど
ときおりそのライブラリが例外を出すことがある、
ライブラリに問題があるのか実装方法に問題があるのか調査してほしい、
みたいな内容でした.
(ちなみにそのライブラリは米国産なので、最悪現地のエンジニアとやりとりを
しなければいけない、みたいな感じでした)
結局ライブラリに問題はなく、単なる実装する側のバグだったわけで
その旨で報告書を作成しました.


さて、その報告書ですが、厳密にはウソを書いてます.
なにがウソかと言うと表題にあるとおりSingletonの実装についてのことです.


報告書で記述しているSingletonはGoFとかで紹介される、いわゆる典型的なSingletonです.
これは「MeyersのSingleton」と呼ばれています.
大抵の場合これで事足ります.しかし厳密に考えると実は問題があるのです.
その1つがマルチスレッドの考慮です.


マルチスレッドでどんな問題が発生するか?それは次回説明します.