[Haskell-cafe] Implementing tryReadMVar
Jan-Willem Maessen - Sun Labs East
Janwillem.Maessen at Sun.COM
Wed Sep 1 09:27:09 EDT 2004
Einar Karttunen wrote:
> Hello
>
> Is it possible to implement an operation like
> tryReadMVar :: MVar a -> IO (Maybe a)
> in a good fashion? The semantics should be
> "Read the value of the MVar without taking
> it if it is filled, otherwise return Nothing".
>
> There are several easy and flawed implementations:
> ...
> tryReadMVar mv = do mc <- tryTakeMVar mv
> case mc of
> Nothing -> return mc
> Just v -> putMVar mv v >> return mc
>
> Now this can block on the putMVar if there was a thread switch
> and someone filled the MVar behind our back.
This sets off alarm bells in my head. What are you actually trying to
do, and why is correct for mutiple threads to race to "putMVar"?
Like locks, MVars require a certain discipline of usage (though
several such disciplines are possible for MVars, whereas with locks
you pretty much want to nest them in lock/unlock pairs). I'm curious
which discipline you are actually trying to use.
-Jan-Willem Maessen
More information about the Haskell-Cafe
mailing list