我知道如果我有多个线程调用putStrLn
而没有任何类型的并发控制,那么线程的输出可能是交错的。
我的问题是putStrLn
是否以线程安全的方式模拟此交错输出?
我假设putStrLn
是一个缓冲的写操作,所以我真的要问两个线程同时调用putStrLn
是否会导致输出缓冲区损坏。
总的来说,关于Haskell(真正的GHC)其他“标准I / O”功能的线程安全性可以说些什么呢?特别是,对于任何缓冲读取操作,是否可以将同一字符返回到两个不同的线程同时进行相同的读取调用?
答案 0 :(得分:28)
是的,从您询问的角度来看,它是线程安全的。 Handle
受MVar
保护,不允许缓冲区损坏。正如你所指出的那样,交错是另一回事。