Почему конец строки putStrLn находится вне блокировки потока?

Когда я использую putStrLn txt из нескольких потоков в Haskell, можно получить вставку текста с концом строк, но если я использую putStr $ txt ++ "\ n" всегда работает.

правильно? Что я делаю не так?

Пример 1:

thread 1: putStrLn "txt 1"
thread 2: putStrLn "txt 2"
thread 3: putStrLn "txt 3"
thread 4: putStrLn "txt 4"
thread 5: putStrLn "txt 5"

Пример вывода:

txt 1txt 3
txt 2txt 5txt 4

Пример 2:

thread 1: putStr $ "txt 1" ++ "\n"
thread 2: putStr $ "txt 2" ++ "\n"
thread 3: putStr $ "txt 3" ++ "\n"
thread 4: putStr $ "txt 4" ++ "\n"
thread 5: putStr $ "txt 5" ++ "\n"

Всегда выводить одну строку для потока:

txt 1
txt 3
txt 2
txt 5
txt 4

Спасибо

Обновление: Я использую ghc 6.12.3 и base-4.2.0.2

5
задан Zhen 11 July 2011 в 07:36
поделиться