CriticalSectionのSpinCount

http://msdn.microsoft.com/ja-jp/library/cc429324.aspx
http://msdn.microsoft.com/ja-jp/library/cc429225.aspx

で、スピンロックの回数を指定出来るようだ。シングルプロセッサのシステムでは内部で自動的に1にするんだろうか?それともループ自体がされないコードが呼ばれるんだろうか?SMTの場合はどうなるんだろうか?たくさんスピンロックしても望みが薄い状況というのは、他の処理に結構時間が掛かる場合だろうか?ある程度短い時間で他が完了してこっちで実行出来る状況になる事が期待出来るならスピンロックを長めにしても割に合うんだろう。でも短くしてすぐに諦めたとしてもそれで稼げるコストってどれくらいなんだろう?塵も積もれば山になる?

ハードウェア資源が貧弱な場合はWindowsNTのスケジューリングとか割り込みにお任せにしてたら思うようにスムーズに並行動作しないっぽい。シングルコアの貧弱な環境で同期コストを掛けたくないなら、実行優先度を上げてシングルスレッドで自前でスケジューリングするのが一番なんだろうなぁ。

http://d.hatena.ne.jp/NyaRuRu/20060910

timeBeginPeriod(1)をして切り替えが頻繁に行われるようにしても、実行に長いサイクル数を費やす処理の完了が早くなるわけではないので、二通りの解決策が考えられる。一つは事前に余裕がある時に小分けにしてでも準備を行っておく事。もう一つは重い処理を最適化して出来るだけ軽くする事。

きびきび動くプログラムはなんだか気持ち良い、って思うけど、それってもたつくのが不快だっていう事の裏返しなんだろう。