MVar's met STM

Log in om je oplossingen te testen.
import Control.Concurrent.STM (STM, TVar, newTVar, readTVar, writeTVar, retry, atomically) import Control.Concurrent (threadDelay, forkIO) import Prelude hiding (read) newtype STMMVAR a = STMMVAR (TVar (Maybe a)) newEmptySTMMVAR :: STM (STMMVAR a) newEmptySTMMVAR = undefined takeSTMMVAR :: STMMVAR a -> STM a takeSTMMVAR (STMMVAR t) = undefined putSTMMVAR :: STMMVAR a -> a -> STM () putSTMMVAR (STMMVAR t) a = undefined write :: STMMVAR String -> STMMVAR String -> IO () write ta tb = do threadDelay 1000000 atomically $ do putSTMMVAR ta "Hello" putSTMMVAR tb "World" return () read :: STMMVAR String -> STMMVAR String -> IO (String, String) read ta tb = atomically $ do b <- takeSTMMVAR tb a <- takeSTMMVAR ta return (a,b) main :: IO () main = do ta <- atomically newEmptySTMMVAR tb <- atomically newEmptySTMMVAR _ <- forkIO $ write ta tb x <- read ta tb putStrLn $ show x
Je kunt zo vaak indienen als je wenst. Er wordt enkel rekening gehouden met je laatst ingediende oplossing.
Log in om je oplossingen te testen.