自戒ofマルチスレッド

Last-modified: 2012-01-23 (月) 12:28:24

自戒

  • どんなタイミングで、どんな長さのSleep()を入れが入ったとしても正常に動作できるように設計しなければならない。
  • Sleep() は、基本的には指定した時間通りに寝るわけではない。
  • Sleep() がなくても、動作しなければならない。特にシングルプロセッサでは重要。
  • Sleep() を入れれば入れるほどにパフォーマンスは下がる。CPUが遊んでしまう。
  • どうしても同期待ちが必要な場合は、クリティカルセクションやイベントなどを使用する。
  • クリティカルセクションをカウントアップに使用してはいけない。
  • カウントアップにはアトミックな操作ができる命令(InterlockedIncrement())などを使用する。
  • あらゆる操作は途中中断されると考えたほうが良い。
  • それが言語レベルでわからないこともある(++valueなど)。要注意。元の値を取り出して、インクリメントして、その結果を格納するのだ。

参考

http://www.csg.is.titech.ac.jp/~chiba/lecture/os/mt04.html