Я знаю, что если у меня есть несколько потоков, вызывающих putStrLn
без какого-либо элемента управления concurrency, что вывод потоков может чередоваться.
Мой вопрос в том, является ли putStrLn
потокобезопасным по модулю этого чередующегося вывода?
Я предполагаю, что putStrLn
является буферизованной операцией записи, поэтому я действительно спрашиваю, может ли быть повреждение выходного буфера, если два потока вызовут putStrLn
в то же время.
И вообще, что можно сказать о безопасности потоков для Haskell (действительно GHC) других функций "стандартного ввода-вывода"? В частности, для любой из операций буферизованного считывания возможно, чтобы один и тот же символ возвращался к двум различным потокам, одновременно делая один и тот же вызов чтения?