C#, C♯, C#相談室 Part42
レス数が900を超えています。1000を超えると表示できなくなるよ。
0945デフォルトの名無しさん
2007/09/24(月) 17:48:2564ビットを32ビット単位じゃなくアトミックに扱えればいいだけなんだが。
javaと違ってvolatileではできないってかつけれられないし、
Interlocked.ReadとInterlocked..Exchangeはなんか大げさってか重い。
例えばファイル更新時刻のチェックを行う場合に、毎回ファイル情報をリフレッシュすると無駄が多いので、
例えば前回チェックから1秒以上立ってたら再度チェックを行いたいような場合、
チェック時のDateTime(もしくはそれのTicks値)をフィールドに覚えておいて、
チェック前にDateTime.Nowと比較して1秒以上経過してるか確認したい。
経過してるなら実際のファイル更新時刻チェックを行って、ファイルの再読み込みなど。
この、現在時刻と前回チェック時刻を比較する際に、情報が64ビットなので
64ビットをアトミックに扱えない(32ビット環境の場合)。
単純にやるならlockでいいんだけど、64ビット環境とかだとそもそも不要なのでなんか悔しい。
かといってこれのチェックだけのためだけにInterlocked何回も使うと、もはやlock一発の方が効率よさそう。
IntPtrを調べて64ビットなら何もしない、32ビットならlockってやるか、
もう単純にlockするだけが結局一番いいんだろうか…
レス数が900を超えています。1000を超えると表示できなくなるよ。