packages feed

caf-0.0.2: Examples/Example03.hs

module Control.Concurrent.Futures.Example03 where
import qualified Control.Concurrent.Futures.QSem as QSem
import qualified Control.Concurrent.Futures.Futures as Futures
import Control.Concurrent

-- local finals
oneSecond = 1000000

   --------------------------------------------------------------------------------
-- | Scenario Example for quantity semaphores using 'Futures.withFuturesDo'.
qsemExampleF :: IO ()
qsemExampleF = Futures.withFuturesDo qsemExample

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

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