RSS Feed

Lisp Project of the Day

atomics

You can support this project by donating at:

Donate using PatreonDonate using Liberapay

atomicsthreads

Documentation😀
Docstrings😀
Tests 😀
Examples🥺
RepositoryActivity😀
CI 🥺

This is a portability library for access to atomic operation primitives such as compare-and-swap, atomic-incf and atomic-decf.

Atomic operations are particularly useful for implementing lockless algorithms.

Here is an example of using compare and swap under SBCL:

POFTHEDAY> (let ((foo (list 1 2 3 4)))
             (atomics:cas (car foo)
                          1
                          42)
             foo)

-> (LET ((FOO (LIST 1 2 3 4)))
     (LET ((#:OLD0 1))
       (EQ #:OLD0
           (LET ((#:CONS1 FOO))
             (LET ((#:OLD2 #:OLD0))
               (LET ((#:NEW3 42))
                 (SB-KERNEL:%COMPARE-AND-SWAP-CAR #:CONS1
                                                  #:OLD2
                                                  #:NEW3))))))
     FOO)

(42 2 3 4)

"atomics", like all @shinmera's libraries, has a good documentation where you can find details on support for atomics operations in different CL implementations.


Brought to you by 40Ants under Creative Commons License