multithreading - putStrLn 是线程安全的吗?

标签 multithreading haskell thread-safety

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

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

我假设 putStrLn是一个缓冲的写操作,所以我真的想问如果有两个线程调用 putStrLn 是否会发生输出缓冲区的任何损坏。同时。

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

最佳答案

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

关于multithreading - putStrLn 是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13549706/

相关文章:

java - 如何在两个线程之间共享变量

haskell - 简单的 Haskell 实例问题

Haskell 向量 C++ push_back 类比

multithreading - 内存映射文件的原子操作

java - java中的一个字段被多个线程异步(不一致)访问会发生什么?

java - 线程限制

Java 线程等待通知

c++ - 有什么方法可以知道线程使用了多少内存?

java - 返回值和 JProgressbar

haskell - 这个特定的递归可以用尾部优化的方式重写吗?