Idris2-boot/libs/base/System/Concurrency/Raw.idr
2019-06-15 11:54:22 +01:00

58 lines
1.3 KiB
Idris

module System.Concurrency.Raw
-- Mutexes and condition variables.
%cg chicken (use srfi-18)
export
threadID : IO ThreadID
threadID = schemeCall ThreadID "blodwen-thisthread" []
export
setThreadData : {a : Type} -> a -> IO ()
setThreadData val = schemeCall () "blodwen-set-thread-data" [val]
export
getThreadData : (a : Type) -> IO a
getThreadData a = schemeCall a "blodwen-get-thread-data" []
export
data Mutex : Type where
export
makeMutex : IO Mutex
makeMutex = schemeCall Mutex "blodwen-mutex" []
export
mutexAcquire : Mutex -> IO ()
mutexAcquire m = schemeCall () "blodwen-lock" [m]
export
mutexRelease : Mutex -> IO ()
mutexRelease m = schemeCall () "blodwen-unlock" [m]
export
data Condition : Type where
export
makeCondition : IO Condition
makeCondition = schemeCall Condition "blodwen-condition" []
export
conditionWait : Condition -> Mutex -> IO ()
conditionWait c m = schemeCall () "blodwen-condition-wait" [c, m]
export
conditionWaitTimeout : Condition -> Mutex -> Int -> IO ()
conditionWaitTimeout c m t
= schemeCall () "blodwen-condition-wait-timeout" [c, m, t]
export
conditionSignal : Condition -> IO ()
conditionSignal c = schemeCall () "blodwen-condition-signal" [c]
export
conditionBroadcast : Condition -> IO ()
conditionBroadcast c = schemeCall () "blodwen-condition-broadcast" [c]