pkgdcl.lisp - clic - Clic is an command line interactive client for gopher writ… | |
git clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
LICENSE | |
--- | |
pkgdcl.lisp (2985B) | |
--- | |
1 ;;;; -*- indent-tabs-mode: nil -*- | |
2 | |
3 (cl:defpackage :bordeaux-threads | |
4 (:nicknames #:bt) | |
5 (:use #:cl #:alexandria) | |
6 #+abcl | |
7 (:import-from :java #:jnew #:jcall #:jmethod) | |
8 (:export #:thread #:make-thread #:current-thread #:threadp #:thread-na… | |
9 #:start-multiprocessing | |
10 #:*default-special-bindings* #:*standard-io-bindings* | |
11 #:*supports-threads-p* | |
12 | |
13 #:lock #:make-lock #:lock-p | |
14 #:acquire-lock #:release-lock #:with-lock-held | |
15 | |
16 #:recursive-lock #:make-recursive-lock #:recursive-lock-p | |
17 #:acquire-recursive-lock #:release-recursive-lock #:with-recu… | |
18 | |
19 #:make-condition-variable #:condition-wait #:condition-notify | |
20 | |
21 #:make-semaphore #:signal-semaphore #:wait-on-semaphore #:sem… | |
22 | |
23 #:with-timeout #:timeout | |
24 | |
25 #:all-threads #:interrupt-thread #:destroy-thread #:thread-al… | |
26 #:join-thread #:thread-yield) | |
27 (:documentation "BORDEAUX-THREADS is a proposed standard for a minimal | |
28 MP/threading interface. It is similar to the CLIM-SYS threading and | |
29 lock support, but for the following broad differences: | |
30 | |
31 1) Some behaviours are defined in additional detail: attention has | |
32 been given to special variable interaction, whether and when | |
33 cleanup forms are run. Some behaviours are defined in less | |
34 detail: an implementation that does not support multiple | |
35 threads is not required to use a new list (nil) for a lock, for | |
36 example. | |
37 | |
38 2) Many functions which would be difficult, dangerous or inefficient | |
39 to provide on some implementations have been removed. Chiefly | |
40 these are functions such as thread-wait which expect for | |
41 efficiency that the thread scheduler is written in Lisp and | |
42 'hookable', which can't sensibly be done if the scheduler is | |
43 external to the Lisp image, or the system has more than one CPU. | |
44 | |
45 3) Unbalanced ACQUIRE-LOCK and RELEASE-LOCK functions have been | |
46 added. | |
47 | |
48 4) Posix-style condition variables have been added, as it's not | |
49 otherwise possible to implement them correctly using the other | |
50 operations that are specified. | |
51 | |
52 Threads may be implemented using whatever applicable techniques are | |
53 provided by the operating system: user-space scheduling, | |
54 kernel-based LWPs or anything else that does the job. | |
55 | |
56 Some parts of this specification can also be implemented in a Lisp | |
57 that does not support multiple threads. Thread creation and some | |
58 thread inspection operations will not work, but the locking | |
59 functions are still present (though they may do nothing) so that | |
60 thread-safe code can be compiled on both multithread and | |
61 single-thread implementations without need of conditionals. | |
62 | |
63 To avoid conflict with existing MP/threading interfaces in | |
64 implementations, these symbols live in the BORDEAUX-THREADS package. | |
65 Implementations and/or users may also make them visible or exported | |
66 in other more traditionally named packages.")) |