putStrLn线程安全吗?

Eri*_*ikR 29 multithreading haskell thread-safety

我知道如果我有多个线程调用putStrLn而没有任何类型的并发控制,那么线程的输出可能是交错的.

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

我假设这putStrLn是一个缓冲的写操作,所以我真的在问两个线程同时调用是否会导致输出缓冲区的任何损坏putStrLn.

一般来说,关于Haskell(真正的GHC)其他"标准I/O"功能的线程安全性可以说些什么呢?特别是,对于任何缓冲的读操作,是否可以将相同的字符返回到两个不同的线程同时进行相同的读取调用?

sha*_*haf 28

是的,从您询问的角度来看,它是线程安全的.A Handle受一个MVar不允许缓冲区损坏的保护.正如您所指出的那样,交错是另一回事.