30

putStrLn同時実行制御なしで複数のスレッドを呼び出している場合、スレッドの出力がインターリーブされる可能性があることを私は知っています。

私の質問はputStrLn、このインターリーブされた出力を法としてスレッドセーフかどうかです。

これはバッファリングされた書き込み操作であると推測しているので、2つのスレッドを同時にputStrLn呼び出すことで、出力バッファの破損が発生する可能性があるかどうかを実際に確認しています。putStrLn

そして、一般的に、Haskell(実際にはGHC)の他の「標準I / O」機能のスレッドセーフについて何が言えますか?特に、バッファリングされた読み取り操作のいずれかについて、同じ文字が2つの異なるスレッドに返され、同時に同じ読み取り呼び出しを行うことは可能ですか?

4

1 に答える 1

28

はい、それはあなたが求めているという意味でスレッドセーフです。Aは、バッファが破損することを許可しないHandleによって保護されています。MVarただし、ご指摘のとおり、インターリーブは別の問題です。

于 2012-11-25T11:43:38.187 に答える