FC2ブログ

乱数の初期化

今日はほぼ一日中、他の方が書いたとあるプログラムをデバッグしていました。

不具合の内容は、平たく言えば、マルチクライアントなとあるシステム上で、あるデータが時々、別のデータで上書きされてしまうというもの・・・。

ただし、発生するのは非常にまれ、とのことでした。

プログラムの不具合の中で、「めったに起こらない不具合」ほど、デバッグが難しいものはないですよね・・・。

症状からして、ロック関係(スレッドセーフで無い系)の不具合かな、いやそうにちがいないと思ったのですが、どうもそうでもなさそうで・・・。

・・・じっさい、かなりてこづったのですが、ついに発見した原因をみて驚きました。

なんと、乱数ジェネレータを使用する前に、適切に初期化してなかったために、ごくごくまれに、「一意で無いユニークID」が生まれていたらしいのです・・・。

・・・他の方のプログラムでしたが、良い教訓を得た思いがしました(^^;)

コメント

No title

>症状からして、ロック関係
 ですね。
 他には思いつきもしないです。
 「セマフォがまともに効いてない?・・・そんなん有り得ないし~」とか悩みそう。
>乱数ジェネレータを使用する前に、適切に初期化してなかった
 良く見つけましたね~
 これは見付からないでしょ。
 なんとなく当たり前の初期化コードが書いてあれば、目がすーっと通り過ぎちゃう。
 お見事でした。
 しかし他人の書いたコードを追うのは疲れますよね(^^;

>そういえばニンジンは私が畑デビューした作物でした。
 ニンジンは発芽までの水遣りが全てなんですけど「野菜の時間」を見てたら、温度と水分維持用に、種蒔き後に不織布をかけてました。
 毎日水遣りできないなら、もしかして良いかも?

Re: No title

> >症状からして、ロック関係
>  ですね。
>  他には思いつきもしないです。
>  「セマフォがまともに効いてない?・・・そんなん有り得ないし~」とか悩みそう。

ですよね~。
これって同時アクセスだけに、デバッグがしにくいんですよね。。

WEBでも、RDBMSが一般的になる前にファイルのロックがいろいろと面倒でした。。

> >乱数ジェネレータを使用する前に、適切に初期化してなかった
>  良く見つけましたね~
>  これは見付からないでしょ。
>  なんとなく当たり前の初期化コードが書いてあれば、目がすーっと通り過ぎちゃう。
>  お見事でした。

ありがとうございます。
その昔、時刻で乱数を初期化し忘れて、シューティングゲームを作ったら、
最初のゲームで敵がでてくる位置がいつも同じだった経験がここで役立つとは(^^;)

>  しかし他人の書いたコードを追うのは疲れますよね(^^;

しかも、プログラム内にコメントが皆無でしたので泣けてきます(^^;)

> >そういえばニンジンは私が畑デビューした作物でした。
>  ニンジンは発芽までの水遣りが全てなんですけど「野菜の時間」を見てたら、温度と水分維持用に、種蒔き後に不織布をかけてました。
>  毎日水遣りできないなら、もしかして良いかも?

不織布ですか~、それは良いことを聞きました!
今度チャレンジするときは試して見ます!
ありがとうございます!

・・・にんじんのてんぷらが食べたくなりました(^^;)

コメントの投稿

トラックバック


この記事にトラックバックする(FC2ブログユーザー)