椿の日記

たぶんプログラムの話をします

スレッドを使ってみる(2)

直接となる原因は分かりませんが、Win32のsleepではなく、Control.Concurrent.threadDelayを使うと、上手くいくようです。

[0,0,0,32769,32768]
[32768,32768,32768,32768,32768]
[32768,0,0,0,0]
[0,0,0,0,0]
[0,32769,32768,32768,32768]
[0,0,0,0,0]

期待した結果通り。

forkIOの場合はHaskellはOSスレッドではなくソフトウェアスレッドを使うので、そこらへんが絡んでる気はします。forkOSを使うとOSスレッドを使うらしいのに、それでもsleepを使って駄目なのは、どういうこっちゃ。