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.