tur/sync
stdlib/sync.tur
defn
once-flag-new
(once-flag-new :ptr<void>)
allocate and initialise a pthread_once_t flag on the heap.
Since: Phase T19-C
defn
once-call
(once-call [flag :ptr<void> init-fn :ptr<void>] :nil)
call init-fn exactly once for the lifetime of flag, regardless of concurrency.
Parameters
| flag | once-flag pointer from once-flag-new | |
| init-fn | zero-argument C function pointer to invoke at most once |
Since: Phase T19-C
defn
once-flag-free
(once-flag-free [flag :ptr<void>] :nil)
free a once-flag allocated by once-flag-new.
Parameters
| flag | once-flag pointer from once-flag-new |
Since: Phase T19-C
defn
sem-new
(sem-new [initial :int] :ptr<void>)
allocate a counting semaphore initialised to initial.
Parameters
| initial | starting count (0 = locked, >0 = permits available) |
Since: Phase T19-C
defn
sem-acquire
(sem-acquire [s :ptr<void>] :nil)
decrement the semaphore; blocks until count > 0.
Parameters
| s | semaphore pointer from sem-new |
Since: Phase T19-C
defn
sem-release
(sem-release [s :ptr<void>] :nil)
increment the semaphore and wake one blocked acquirer.
Parameters
| s | semaphore pointer from sem-new |
Since: Phase T19-C
defn
sem-free
(sem-free [s :ptr<void>] :nil)
destroy and free a semaphore allocated by sem-new.
Parameters
| s | semaphore pointer from sem-new |
Since: Phase T19-C