aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/documentation/lux/control/concurrency/semaphore.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/documentation/lux/control/concurrency/semaphore.lux')
-rw-r--r--stdlib/source/documentation/lux/control/concurrency/semaphore.lux69
1 files changed, 69 insertions, 0 deletions
diff --git a/stdlib/source/documentation/lux/control/concurrency/semaphore.lux b/stdlib/source/documentation/lux/control/concurrency/semaphore.lux
new file mode 100644
index 000000000..4530b5455
--- /dev/null
+++ b/stdlib/source/documentation/lux/control/concurrency/semaphore.lux
@@ -0,0 +1,69 @@
+(.module:
+ [library
+ [lux (#- if loop)
+ ["$" documentation (#+ documentation:)]
+ [data
+ [text (#+ \n)
+ ["%" format (#+ format)]]]
+ [macro
+ ["." template]]]]
+ [\\library
+ ["." /]])
+
+(documentation: /.Semaphore
+ "A tool for controlling access to resources by multiple concurrent processes.")
+
+(documentation: /.semaphore
+ ""
+ [(semaphore initial_open_positions)])
+
+(documentation: /.wait!
+ (format "Wait on a semaphore until there are open positions."
+ \n "After finishing your work, you must 'signal' to the semaphore that you're done.")
+ [(wait! semaphore)])
+
+(documentation: /.signal!
+ "Signal to a semaphore that you're done with your work, and that there is a new open position."
+ [(signal! semaphore)])
+
+(documentation: /.Mutex
+ "A mutual-exclusion lock that can only be acquired by one process at a time.")
+
+(documentation: /.mutex
+ "Creates a brand-new mutex."
+ [(mutex _)])
+
+(documentation: /.synchronize!
+ "Runs the procedure with exclusive control of the mutex."
+ [(synchronize! mutex procedure)])
+
+(documentation: /.limit
+ "Produce a limit for a barrier.")
+
+(documentation: /.Limit
+ "A limit for barriers.")
+
+(documentation: /.Barrier
+ "A barrier that blocks all processes from proceeding until a given number of processes are parked at the barrier.")
+
+(documentation: /.block!
+ "Wait on a barrier until all processes have arrived and met the barrier's limit.")
+
+(.def: .public documentation
+ (.List $.Module)
+ ($.module /._
+ ""
+ [..Semaphore
+ ..semaphore
+ ..wait!
+ ..signal!
+ ..Mutex
+ ..mutex
+ ..synchronize!
+ ..limit
+ ..Limit
+ ..Barrier
+ ..block!
+ ($.default /.semaphore_is_maxed_out)
+ ($.default /.barrier)]
+ []))