pkgdcl.lisp - clic - Clic is an command line interactive client for gopher written in Common LISP (HTM) git clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/clic/ (DIR) Log (DIR) Files (DIR) Refs (DIR) Tags (DIR) README (DIR) 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-name 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-recursive-lock-held 18 19 #:make-condition-variable #:condition-wait #:condition-notify 20 21 #:make-semaphore #:signal-semaphore #:wait-on-semaphore #:semaphore #:semaphore-p 22 23 #:with-timeout #:timeout 24 25 #:all-threads #:interrupt-thread #:destroy-thread #:thread-alive-p 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."))