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

_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to