wobsurv-0.1.0: library/Wobsurv/Util/WorkerThread.hs
module Wobsurv.Util.WorkerThread where
import BasePrelude hiding (fork)
import Wobsurv.Util.MasterThread
import Control.Concurrent.STM.TBQueue
import Control.Monad.Trans.Class
type WorkerThread =
TBQueue (MT ())
new :: Int -> MT WorkerThread
new size =
do
queue <- lift $ atomically $ newTBQueue size
fork $ do
forever $ join $ lift $ atomically $ readTBQueue queue
return queue
schedule :: MT () -> WorkerThread -> MT ()
schedule task queue =
lift $ atomically $ writeTBQueue queue task