Allegro: force minimum timeout for WAIT-ON-SEMAPHORE
[bordeaux-threads.git] / apiv2 / pkgdcl.lisp
bloba1c11a50c20e35793bc85abdec7cdb61a81c0d98
1 ;;;; -*- Mode: LISP; Syntax: ANSI-Common-lisp; Base: 10; Package: CL-USER -*-
2 ;;;; The above modeline is required for Genera. Do not change.
4 (defpackage :bordeaux-threads-2
5 (:nicknames :bt2)
6 (:use :common-lisp :alexandria :global-vars)
7 #+abcl
8 (:import-from :java #:jnew #:jcall #:jclass #:jmethod)
9 #+sbcl
10 (:import-from :sb-ext #:timeout)
12 (:export
13 #:*supports-threads-p*
14 #:bordeaux-threads-error
15 #:not-implemented)
17 ;; Threads
18 (:export
19 #:thread
20 #:thread-name
21 #:thread-native-thread
22 #:threadp
23 #:make-thread
24 #:*default-special-bindings*
25 #:*standard-io-bindings*
26 #:current-thread
27 #:all-threads
28 #:start-multiprocessing
30 #:interrupt-thread
31 #:signal-in-thread
32 #:warn-in-thread
33 #:error-in-thread
34 #:destroy-thread
35 #:thread-alive-p
36 #:join-thread
37 #:abnormal-exit
38 #:abnormal-exit-condition
39 #:thread-yield)
41 ;; Locks
42 (:export
43 #:lock
44 #:lockp
45 #:recursive-lock
46 #:recursive-lock-p
47 #:lock-name
48 #:lock-native-lock
49 #:native-lock
50 #:native-lock-p
52 #:make-lock
53 #:acquire-lock
54 #:release-lock
55 #:with-lock-held
57 #:make-recursive-lock
58 #:acquire-recursive-lock
59 #:release-recursive-lock
60 #:with-recursive-lock-held)
62 ;; Condition variables
63 (:export
64 #:condition-variable
65 #:condition-variable-p
66 #:make-condition-variable
67 #:condition-wait
68 #:condition-notify
69 #:condition-broadcast)
71 ;; Semaphores
72 (:export
73 #:semaphore
74 #:semaphorep
75 #:make-semaphore
76 #:signal-semaphore
77 #:wait-on-semaphore)
79 ;; Atomic operations
80 (:export
81 #:make-atomic-integer
82 #:atomic-integer-cas
83 #:atomic-integer-decf
84 #:atomic-integer-incf
85 #:atomic-integer-value)
87 ;; Timeouts
88 (:export
89 #:timeout
90 #:with-timeout)
92 (:documentation "BORDEAUX-THREADS is a proposed standard for a minimal
93 MP/threading interface. It is similar to the CLIM-SYS threading and
94 lock support, but for the following broad differences:
96 1) Some behaviours are defined in additional detail: attention has
97 been given to special variable interaction, whether and when
98 cleanup forms are run. Some behaviours are defined in less
99 detail: an implementation that does not support multiple
100 threads is not required to use a new list (nil) for a lock, for
101 example.
103 2) Many functions which would be difficult, dangerous or inefficient
104 to provide on some implementations have been removed. Chiefly
105 these are functions such as thread-wait which expect for
106 efficiency that the thread scheduler is written in Lisp and
107 'hookable', which can't sensibly be done if the scheduler is
108 external to the Lisp image, or the system has more than one CPU.
110 3) Unbalanced ACQUIRE-LOCK and RELEASE-LOCK functions have been
111 added.
113 4) Posix-style condition variables have been added, as it's not
114 otherwise possible to implement them correctly using the other
115 operations that are specified.
117 Threads may be implemented using whatever applicable techniques are
118 provided by the operating system: user-space scheduling,
119 kernel-based LWPs or anything else that does the job.
121 To avoid conflict with existing MP/threading interfaces in
122 implementations, these symbols live in the BORDEAUX-THREADS-2 package.
123 Implementations and/or users may also make them visible or exported
124 in other more traditionally named packages."))