
24 Oct
2009
24 Oct
'09
6:11 a.m.
I have a doubt that this code works like I want because actual STM implementation exposes its effects import Control.Concurrent import Control.Concurrent.STM main = do c <- atomically $ newTChan :: IO (TChan ()) r <- atomically $ newTVar False forkIO $ do atomically $ do r0 <- readTVar r case r0 of True -> return () False -> readTChan c myThreadId >>= killThread threadDelay 1000000 atomically (writeTVar r True) The thread stops on readTChan, but exits when I change the TVar, which happens before the readTChan. Should I trust this is the correct STM behaviour , and will not change in different implementations ? thanks paolino