SampleVar semantics

Antoine Latter aslatter at gmail.com
Sun Jan 2 07:12:12 CET 2011


I would file a bug on the GHC bug tracker:

http://hackage.haskell.org/trac/ghc/newticket?type=bug

You will need to use the guest login to trac, though (in grey text at
the bottom of the page).

I've also CCed the GHC-users list, as there are folks over there that
might have knowledge of the concurrency libraries.

Take care,
Antoine

On Sat, Jan 1, 2011 at 7:03 PM, Eric Stansifer
<eric.stansifer+haskell at gmail.com> wrote:
> Hi,
>
> I didn't get a response to my question on haskell-cafe, perhaps
> libraries is a more appropriate place to ask.
>
>
> doc:  http://www.haskell.org/ghc/docs/7.0-latest/html/libraries/base-4.3.0.0/Control-Concurrent-SampleVar.html
> source:  http://www.haskell.org/ghc/docs/7.0-latest/html/libraries/base-4.3.0.0/src/Control-Concurrent-SampleVar.html
>
> The isEmptySampleVar function,
>
> isEmptySampleVar :: SampleVar a -> IO Bool
> isEmptySampleVar (SampleVar svar) = do
>   (readers, _) <- readMVar svar
>   return (readers == 0)
>
> returns False whenever readers < 0.  However, readers < 0 occurs when
> there are threads waiting on an empty SampleVar.
>
> The documentation on SampleVar is a bit sparse on explaining the
> intended behavior;  I wouldn't have expected this behavior if I hadn't
> read the source.  Can someone clarify the semantics of SampleVar?
>
> For a contrived example, consider
>
>
> do_something = threadDelay 100000     -- 100 ms
>
> produce, consume :: SampleVar Int -> IO ()
> produce svar = do
>    do_something
>    b <- isEmptySampleVar svar
>    if b then    randomIO >>= writeSampleVar svar    else   return ()
>    produce svar
>
> consume svar = do
>    x <- readSampleVar svar
>    print x
>    consume svar
>
> main = do
>    svar <- newEmptySampleVar
>    forkIO $ produce svar
>    forkIO $ consume svar
>    threadDelay 1000000       -- one second
>
> This code deadlocks instead of printing random numbers.
>
> Thanks,
> Eric
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>



More information about the Libraries mailing list