我知道如果我有多个线程调用 putStrLn
没有任何类型的并发控制,线程的输出可能是交错的。
我的问题是 putStrLn
这个交错输出是线程安全的模数吗?
我假设 putStrLn
是一个缓冲的写操作,所以我真的想问如果有两个线程调用 putStrLn
是否会发生输出缓冲区的任何损坏。同时。
总的来说,关于 Haskell(实际上是 GHC)的其他“标准 I/O”函数的线程安全可以说什么?特别是,对于任何缓冲读取操作,同一个字符是否有可能返回到同时进行相同读取调用的两个不同线程?
最佳答案
是的,就您所问的而言,它是线程安全的。一个 Handle
受 MVar
保护这不会让缓冲区损坏。但是,正如您所指出的,交错是另一回事。
关于multithreading - putStrLn 是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13549706/