[Haskell-beginners] Thread Blocking

mukesh tiwari mukeshtiwari.iiitm at gmail.com
Tue Sep 4 21:16:36 CEST 2012


Hi Eugene
Thank you for reply.

On Wed, Sep 5, 2012 at 12:32 AM, Eugene Perederey <
eugene.perederey at gmail.com> wrote:

> 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,
>

So at least in this case I should get thread blocked indefinitely in an
MVar operation


> or 10 is put into mvar in main, blocking the other thread indefinitely.
>

or main will execute and fun thread will die. There are 50 - 50 chance for
this ( assuming both are equally likely ). I did some modification in my
code and Now I am  consistently getting "Concurrent: thread blocked
indefinitely in an MVar operation"

import Data.List
import Control.Concurrent

fun m = do
   putMVar m 10
   return ()


main = do
  m <- newEmptyMVar
  forkIO $ fun m
  putStrLn "I am inside main"
  putMVar m 10
  return ()

[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
I am inside main
Concurrent: thread blocked indefinitely in an MVar operation
[mukesh.tiwari@ Programming]$ ./Concurrent  +RTS -N2
I am inside main
Concurrent: thread blocked indefinitely in an MVar operation
[mukesh.tiwari@ Programming]$ ./Concurrent  +RTS -N2
I am inside main
Concurrent: thread blocked indefinitely in an MVar operation
[mukesh.tiwari@ Programming]$ ./Concurrent  +RTS -N2
I am inside main
Concurrent: thread blocked indefinitely in an MVar operation
[mukesh.tiwari@ Programming]$ ./Concurrent  +RTS -N2
I am inside main
Concurrent: thread blocked indefinitely in an MVar operation

My question is why the outcome in first case is deterministic. Every time
the code executing  ( at least half the time main thread should be blocked
) .

Regards
Mukesh Tiwari


>
> On 4 September 2012 11:54, mukesh tiwari <mukeshtiwari.iiitm at gmail.com>
> wrote:
> > 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 at haskell.org
> > http://www.haskell.org/mailman/listinfo/beginners
> >
>
>
>
> --
> Best,
> Eugene Perederey
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20120905/2ab52dc8/attachment.htm>


More information about the Beginners mailing list