-- Idris2

import System
import System.Concurrency

-- Test `conditionSignal` wakes 1 thread 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 child"
     sleep 1
     conditionSignal cv
     -- don't threadWait since we don't know which thread got signalled
     sleep 1

