⚠️ Warning: This is a draft ⚠️

This means it might contain formatting issues, incorrect code, conceptual problems, or other severe issues.

If you want to help to improve and eventually enable this page, please fork RosettaGit's repository and open a merge request on GitHub.


Bordeaux-Threads is a Common Lisp library providing threading functionality across currently existing libraries. Threading isn't specified in the ANSI CL standard, therefore it's necessary to access implementation-specific functionality.

One common thing left unspecified as well is how special variables behave in relation to threading. Despite no mention in the standard, all implementations implementing threading treat special variables as thread-local variables [1] with some of them providing also truly global variables (see SBCL's SB-EXT:DEFGLOBAL for instance).

More information can be found at the [http://common-lisp.net/project/bordeaux-threads/ project page].

Other library implementing threading is Portable-Threads, but it has omissions, e.g. there's no way to manually acquire or release locks without a WITH-LOCK macro or acquire them non-blockingly.

[1] But this gets tricky sometimes, e.g. there can only be 8192 thread-local variables ever created in SBCL, so using gensyms with PROGV is out of question. Also there's no way to garbage-collect thread-local bindings, so it doesn't matter if you only use few gensyms in PROGV at a time.