Multithreading ============== Is currently being developed but is usable and testable. HOWEVER: Various tests on various platforms may fail. CLISP may segfault. Your work may be lost. You have been warned! Installation ------------ In the Makefile, define in the CFLAGS the symbol MULTITHREAD and one of the symbols POSIX_THREADS, WIN32_THREADS. (See xthread.d about their meaning.) Alternatively, you can pass "--with-threads=flavor" to the top-level configure ("flavor" is one of POSIX_THREADS, WIN32_THREADS). When building with gcc that does not support __thread qualifier for per thread variables it's better to add to CFLAGS: -DUSE_CUSTOM_TLS=3 (or 2). Built executable will be significantly faster than the one with default settings (if we rely on OS API for thread local storage i.e. pthread_getspecific()). See comments in: http://clisp.hg.sourceforge.net/hgweb/clisp/clisp/raw-file/default/src/lispbibl.d Platforms on which gcc does not support __thread qualifier are (encountered up to now): MacOSX, Win32+mingw DOCS: impbyte.xml:"gc-mt"; impext.xml:"mt" preview: http://clisp.podval.org/impnotes/mt.html http://clisp.podval.org/impnotes/gc-mt.html Follows a list of TODO/REMARKS items - everything after --NOT IMPLEMENTED YET-- is not ready. Packages -------- PACKAGE objects have internal mutex and are locked by INTERN before adding a symbol. All modifications of internal package data are guarded by this mutex. Care should be taken when WITH-PACKAGE-ITERATOR is used. While iterating changes in packages involved may cause unexpected errors (but no crash). Locking all these packages does not seem a good option. CLOS ---- DEFCLASS, DEFGENERIC, DEFMETHOD, DEFSTRUCT must get a global "DEF-CLOS" lock because they change the global class hierarchy. (This is a consequence of the Parallelizability Principle.) --NOT IMPLEMENTED YET-- WIN32 ----- --NOT IMPLEMENTED YET-- Currently blocking I/O cannot be interrupted. The interrupt will be handled after the call returns