Ich habe zwei Threads in Haskell, die IO durchführen. (Sie drucken nur). So etwas wie die folgenden:Kann ich sicherstellen, dass Haskell atomare IO ausführt?
thread1 :: IO()
thread1 = putStrLn "One"
thread2 :: IO()
thread2 = putStrLn "Two"
Ich bin derzeit immer Ergebnisse wie folgt aus:
OnTwoe
OTnweo
Wie kann ich sicherstellen, dass jeder Thread atomar seine IO abgeschlossen?
Als Übung: Versuchen Sie, dies mit Transaktionsspeicher zu schreiben, um den Zugriff auf die Ressource zu bestellen. –
Ich werde das geben! habe ich auch geändert: mit MVar lock $ (\ _ -> putStrLn "bar") – Toymakerii
Ich habe diesen Entwurf nicht verwendet, aber das alternative Design, das Sie am Ende erwähnen, hat ziemlich gut für mich in ein paar Projekten gearbeitet. –