packages feed

caf-0.0.2: Examples/Example05.hs

module Control.Concurrent.Futures.Example05 where
import qualified Control.Concurrent.Futures.HQSem as HQSem
import qualified Control.Concurrent.Futures.Futures as Futures
import Control.Concurrent

-- local finals
oneSecond = 1000000
 
    --------------------------------------------------------------------------------
-- | Scenario Example for quantity semaphores using 'Futures.withFuturesDo'.
hqsemExampleF :: IO ()
hqsemExampleF = Futures.withFuturesDo hqsemExample

-- | Scenario Example for for quantity semaphores.
hqsemExample :: IO ()
hqsemExample = do
 putStrLn $ "Scenario example with quantity semaphores"
 qsem <- HQSem.newHQSem 1
 Control.Concurrent.forkIO $ (useQSem qsem)
 Control.Concurrent.forkIO $ (useQSem qsem)
 Control.Concurrent.threadDelay $ 10 * oneSecond

useQSem :: HQSem.HQSem -> IO ()
useQSem q = do
 HQSem.downHQSem q
 putStrLn $ "Entered."-- ++ show Control.Concurrent.myThreadId
 Control.Concurrent.threadDelay $ 2 * oneSecond
 HQSem.upHQSem q