今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

複数プロセス間で Singleton

デザインパターンMLで出た話題。

.NETの場合でも一般的な意味でのsingletonを実行ファイル間で実装することはむずかしいんじゃないでしょうか。
ただ、Remotingの場合に限り、singletonパターンを実装するための仕組みが用意されていますから、それを利用することができる、というだけの話では。

複数プロセスで構成するシステムで、システムにユニークなSingletonを実現したとする。
危険その1
排他の問題。Singleton にアクセスする場合、一般的に排他の問題がつきまとうが、ひとつのプロセスでさえデッドロックに気をつけないといけないのに、複数プロセスからアクセスするとなると、きっと普通の人間には管理できない。(と、思う)
危険その2
アクセス制御の問題。複数のプロセスからアクセスできるようにするということは、システム外のプロセスからもアクセスできる可能性がある。システム外のプロセスからはアクセスできないようにする対策が必要だろう。しかし普通はシステム外からのアクセスなんて想定しないので、まずそんな対策はしない。そうすると、何かのはずみ(あるアプリケーションをインストールした等)でたまたま同じSingletonにアクセスする条件ができてしまった場合、その原因を特定するのは非常に困難。
危険その3
バージョンの整合性の問題。Singletonにバージョンアップがあった場合、整合性が取れなくなる可能性が高い。そこまで.NETの仕組みがサポートしてくれてるのならいいのだが。
危険その4
もし誰かが上記の危険性に気付き、開発ルールで対策したとする。保守のときには、そのルールが守られることはあまり期待できない。
その4までの危険に気付いたとしたら、Singleton を使うことをやめるのが得策だということに気付くかもしれない。

#このあたりは後発の強みかと。

強みというよりは、単なる墓穴だと思う。良く言えば「諸刃の剣」?