simonmar at microsoft.com
Tue Jan 20 16:49:36 EST 2004
> I took a look at the implementation of the MVar function swap
> and I am
> just woundering where the atomicy comes from.
> -- |Swap the contents of an 'MVar' for a new value.
> swapMVar :: MVar a -> a -> IO a
> swapMVar mvar new =
> block $ do
> old <- takeMVar mvar
> putMVar mvar new
> return old
> Is it really just the Exception block, that makes it not
swapMVar is only atomic with respect to other well-behaved threads. By
well-behaved I mean that they only do takeMVar followed by putMVar on
the MVar, never a putMVar on its own. Does that answer your question?
More information about the Haskell-Cafe