Re: SampleVar semantics

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
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/Contr... source: http://www.haskell.org/ghc/docs/7.0-latest/html/libraries/base-4.3.0.0/src/C...
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@haskell.org http://www.haskell.org/mailman/listinfo/libraries
participants (1)
-
Antoine Latter