30

我知道,如果我有多个线程putStrLn在没有任何并发​​控制的情况下调用,那么线程的输出可能是交错的。

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

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

总的来说,关于 Haskell(实际上是 GHC)的其他“标准 I/O”函数的线程安全可以说什么?特别是,对于任何缓冲的读取操作,同一个字符是否有可能返回到同时进行相同读取调用的两个不同线程?

4

1 回答 1

28

是的,就您所问的而言,它是线程安全的。AHandle受保护,MVar不会让缓冲区损坏。但是,正如您所指出的,交错是另一回事。

于 2012-11-25T11:43:38.187 回答