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

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

続・システムクロックが進む問題

BugId:4500388 Calling Thread.sleep with small argument affects system clock on windowsの Evaluation に以下の記述があった。

Hotspot uses Windows routines timeBeginPeriod() and timeEndPeriod() to change the Windows timing resolution from its default value to one millisecond and back during a Thread.sleep().

timeBeginPeriod()/timeEndPeriod() が気になったので Google で検索してみた。すると、timeBeginPeriod()に関する実験と結果を掲載したページがヒットした。そのページの最後には。。。

このように、timeBeginPeriod(), timeEndPeriod()は極めて不可解な挙動を示し、まともな「仕様」といえない実装となっている。

比較的単純なマルチスレッドのアプリケーションで時計が進む現象を再現させられることが分かったので、いくつかの機種で試してみたところ、Pentium2/3 の機種では全く発生しなかったが、Pentium4 の機種では全部で時計の進みが発生した。
なんだか Windows2000 のバグっぽいように思えてきた。