aslatter at gmail.com
Sun Jan 2 07:12:12 CET 2011
I would file a bug on the GHC bug tracker:
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.
On Sat, Jan 1, 2011 at 7:03 PM, Eric Stansifer
<eric.stansifer+haskell at gmail.com> wrote:
> 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-220.127.116.11/Control-Concurrent-SampleVar.html
> source: http://www.haskell.org/ghc/docs/7.0-latest/html/libraries/base-18.104.22.168/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
> 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.
> Libraries mailing list
> Libraries at haskell.org
More information about the Libraries