多线程 – 是putStrLn线程安全吗?

我知道如果我有多个线程调用putStrLn没有任何种类的并发控制,线程的输出可能交错。

我的问题是putStrLn是线程安全模交错输出?

我假设putStrLn是一个缓冲写操作,所以我真的要问是否可能发生输出缓冲区的任何损坏,通过有两个线程调用putStrLn在同一时间。

一般来说,对Haskell(真正的GHC)的其他“标准I / O”函数的线程安全性可以说什么?特别地,对于任何缓冲的读取操作,同一个字符可以返回到两个不同的线程,同时进行相同的读取调用吗?

最佳答案
是的,它是线程安全的,在你的问题的意义上。句柄由MVar保护,MVar不允许缓冲区损坏。正如你所指出的,交织是另一回事。

转载注明原文:多线程 – 是putStrLn线程安全吗? - 代码日志