Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ぐだぐだ×ぐだぐだ=炎上

  1. マルチスレッドで動作するプログラムがある
  2. それを他のプラットフォームへ移植する
  3. 新しいプラットフォームではマルチスレッドにしておく意味があまりないので、シングルスレッド化する
  4. シングルスレッドならば、排他制御は実装するだけ無駄なので、排他関係の処理は削除する
  5. シングルスレッド化されたプログラムを、また別のプラットフォームに移植する
  6. 新しいプラットフォームで、排他制御を加えずマルチスレッド化する
  7. \(^o^)/

絵に描いたようなぐだぐだっぷり。
1つ1つは致命的なミスではないのだが、積もり積もって最後に爆発。
炎上するのも致し方なし。

結果としてババを引いたのは「マルチスレッド化した人」。
だが、彼にも同情する点はある。
彼が書いた部分には、複数スレッドから同時にアクセスされるインスタンスは存在しない。
彼のコード自体は、「皆がお行儀の良いコードを書いていれば」スレッド安全。

問題なのは、彼がインスタンス化したクラス。
これは内部(しかも奥の奥の方)で排他制御せずにシングルトンオブジェクトを操作している。
つまり、別のスレッドで別のインスタンスを操作するだけで問題が発生し得るのである。

何故こんなことになっているかと言えば、そう。
シングルスレッド化したときに、この部分の排他制御を外してしまっているからだ。
この処置によって、それまでスレッド安全だったクラスが、インスタンス単位のスレッド安全性すら保証されていないクラスになってしまった。

このプログラムをシングルスレッド化したかった理由というのは、なんとなく解る。
先にも言ったとおり、このプログラムがマルチスレッドである意味はほとんどない。
その上、下手にマルチスレッドである所為か、「仕様書のないイベント駆動」などという、一見にはすこぶる流れを追いにくい状態になっている。
それを、少しでも改善しておきたかったのだろう。
残念ながら、その想いは「地雷」として、後の世に受け継がれることになってしまったわけだが。

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/104-951869db
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。