multithreading haskell thread-safety

multithreading - ¿Es seguro el subproceso putStrLn?



haskell thread-safety (1)

Sé que si tengo varios subprocesos que llaman a putStrLn sin ningún tipo de control de concurrencia, la salida de los subprocesos puede estar intercalada.

Mi pregunta es si putStrLn es módulo seguro para subprocesos esta salida intercalada?

Supongo que putStrLn es una operación de escritura en búfer, por lo que realmente estoy preguntando si se puede producir algún daño en el búfer de salida al tener dos subprocesos que llaman putStrLn al mismo tiempo.

Y en general, ¿qué se puede decir acerca de la seguridad de subprocesos de otras funciones de "E / S estándar" de Haskell (en realidad, de GHC)? En particular, para cualquiera de las operaciones de lectura en búfer, ¿es posible que el mismo carácter se devuelva a dos hilos diferentes que realizan la misma llamada de lectura al mismo tiempo?


Sí, es seguro para hilos en el sentido de que estás preguntando. Un Handle está protegido por un MVar que no permite que el búfer se corrompa. Sin embargo, como usted señaló, el intercalado es un asunto diferente.