
Why do you think main should block more than once?
I see only two possible scenarios: the fun thread puts to mvar first
thus blocking main,
or 10 is put into mvar in main, blocking the other thread indefinitely.
On 4 September 2012 11:54, mukesh tiwari
Hello All I was going trough Real World Haskell and it says "If we try to put a value into an MVar that is already full, our thread is put to sleep until another thread takes the value out". I wrote a simple code to block main
import Data.List import Control.Concurrent
fun m = do putMVar m 10 return ()
main = do m <- newEmptyMVar forkIO $ fun m putMVar m 10 return ()
What I am expecting that main should be blocked at least couple of times but its behaving more deterministically. [mukesh.tiwari@ Programming]$ ghc-7.4.1 -threaded -fforce-recomp Concurrent.hs [1 of 1] Compiling Main ( Concurrent.hs, Concurrent.o ) Linking Concurrent ... [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$ ./Concurrent +RTS -N2 [mukesh.tiwari@ Programming]$
I am expecting to get thread blocked indefinitely on MVar at least half the time. Could some one please tell me why this deterministic behavior ? Regards Mukesh Tiwari
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
-- Best, Eugene Perederey