"Simon Peyton-Jones" <[EMAIL PROTECTED]> writes: > | takeMVar# :: SynchVar# s elt -> State# s -> (# State# s, elt #) > | putMVar# :: SynchVar# s elt -> State# s -> State# s > > Bad idea to look at the primops.
(a) It was the first mention of MVars that I found in the docs. (b) I only really mentioned it because the type sigs are wrong. > | readMVar :: MVar a -> IO a > | This is a combination of takeMVar and putMVar; ie. it takes the > | value from the MVar, puts it back, and also returns it. > | > | It specifically avoids describing the combination as atomic ... > > False. readMVar is completely described by > readMVar m = do { v <- takeMVar m; putMVar m v; return v } > > If it gets pre-empted between the take and the put, no matter; anyone > trying to take from that same MVar will block. Doesn't it block if another thread manages to sneak a putMVar into the middle? Maybe I should read your "Awkward Squad" paper to find out if this matters. Regards, Malcolm _______________________________________________ FFI mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/ffi