X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=doc%2Fmanual%2Fthreading.texinfo;h=b51ba34a902baa9477dd2e5a1e8d661680f06b4b;hb=d84e1dbbbf11e76663cfaa0b1a5b7591f39f01b6;hp=b6816691b06be8e70180351a300339b976535787;hpb=a08efdfc11a98f4c7531cf67e0d4fdf5f274681f;p=sbcl.git diff --git a/doc/manual/threading.texinfo b/doc/manual/threading.texinfo index b681669..b51ba34 100644 --- a/doc/manual/threading.texinfo +++ b/doc/manual/threading.texinfo @@ -9,16 +9,21 @@ multiprocessing on machines that have more than one CPU, but it does not allow Lisp control of the scheduler. This is found in the SB-THREAD package. -This requires Linux (2.6+ or systems with NPTL backports) running on the -x86 or x86-64 architecture, or SunOS (Solaris) on the x86. Support for -threading on Darwin (Mac OS X) and FreeBSD on the x86 is experimental. +Threads are part of the default build on x86[-64] Linux only. + +They are also experimentally supported on: x86[-64] Darwin (Mac OS X), +x86[-64] FreeBSD, x86 SunOS (Solaris), and PPC Linux. On these platforms +threads must be explicitly enabled at build-time, see @file{INSTALL} for +directions. @menu * Threading basics:: * Special Variables:: +* Atomic Operations:: * Mutex Support:: * Semaphores:: * Waitqueue/condition variables:: +* Barriers:: * Sessions/Debugging:: * Foreign threads:: * Implementation (Linux x86/x86-64):: @@ -91,6 +96,17 @@ The last point means that prints @code{0} and not @code{1} as of 0.9.6. +@node Atomic Operations +@comment node-name, next, previous, up +@section Atomic Operations + +SBCL provides a few special purpose atomic operations, particularly +useful for implementing lockless algorithms. + +@include macro-sb-ext-atomic-decf.texinfo +@include macro-sb-ext-atomic-incf.texinfo +@include macro-sb-ext-compare-and-swap.texinfo + @node Mutex Support @comment node-name, next, previous, up @section Mutex Support @@ -143,6 +159,7 @@ experimental, subject to API changes without notice. @include fun-sb-thread-semaphore-count.texinfo @include fun-sb-thread-semaphore-name.texinfo @include fun-sb-thread-signal-semaphore.texinfo +@include fun-sb-thread-try-semaphore.texinfo @include fun-sb-thread-wait-on-semaphore.texinfo @node Waitqueue/condition variables @@ -229,6 +246,36 @@ it. @include fun-sb-thread-condition-notify.texinfo @include fun-sb-thread-condition-broadcast.texinfo +@node Barriers +@comment node-name, next, previous, up +@section Barriers + +These are based on the Linux kernel barrier design, which is in turn +based on the Alpha CPU memory model. They are presently implemented for +x86, x86-64, and PPC systems, and behave as compiler barriers on all +other CPUs. + +In addition to explicit use of the @code{sb-thread:barrier} macro, the +following functions and macros also serve as @code{:memory} barriers: + +@itemize +@item +@code{sb-ext:atomic-decf} and @code{sb-ext:atomic-incf}. +@item +@code{sb-ext:compare-and-swap}. +@item +@code{sb-thread:get-mutex}, @code{sb-thread:release-mutex}, +@code{sb-thread:with-mutex} and @code{sb-thread:with-recursive-lock}. +@item +@code{sb-thread:signal-semaphore}, @code{sb-thread:try-semaphore} and +@code{sb-thread:wait-on-semaphore}. +@item +@code{sb-thread:condition-wait}, @code{sb-thread:condition-notify} and +@code{sb-thread:condition-broadcast}. +@end itemize + +@include macro-sb-thread-barrier.texinfo + @node Sessions/Debugging @comment node-name, next, previous, up @section Sessions/Debugging