-- Idris2 import System import System.Concurrency -- Test `conditionBroadcast` wakes all threads for 1 main and N child threads main : IO () main = let n = 3 in do cvMutex <- makeMutex cv <- makeCondition ts <- for [1..n] $ \_ => fork $ do mutexAcquire cvMutex conditionWait cv cvMutex putStrLn "Hello mother" mutexRelease cvMutex putStrLn "Hello children" sleep 1 conditionBroadcast cv ignore $ for ts $ \t => threadWait t sleep 1