Common Lisp Package: TRIVIAL-COMPARE-AND-SWAP

README:

MACRO

Public

COMPARE-AND-SWAP (PLACE OLD NEW)

Atomically stores NEW in PLACE if OLD matches the current value of PLACE. Two values are considered to match if they are EQ. Returns the previous value of PLACE: if the returned value is EQ to OLD, the swap was carried out. PLACE must be an CAS-able place. Built-in CAS-able places are accessor forms whose CAR is one of the following: CAR, CDR, FIRST, REST, SVREF, SYMBOL-PLIST, SYMBOL-VALUE, SVREF, SLOT-VALUE SB-MOP:STANDARD-INSTANCE-ACCESS, SB-MOP:FUNCALLABLE-STANDARD-INSTANCE-ACCESS, or the name of a DEFSTRUCT created accessor for a slot whose declared type is either FIXNUM or T. Results are unspecified if the slot has a declared type other then FIXNUM or T. In case of SLOT-VALUE, if the slot is unbound, SLOT-UNBOUND is called unless OLD is EQ to SB-PCL:+SLOT-UNBOUND+ in which case SB-PCL:+SLOT-UNBOUND+ is returned and NEW is assigned to the slot. Additionally, the results are unspecified if there is an applicable method on either SB-MOP:SLOT-VALUE-USING-CLASS, (SETF SB-MOP:SLOT-VALUE-USING-CLASS), or SB-MOP:SLOT-BOUNDP-USING-CLASS. Additionally, the PLACE can be a anything for which a CAS-expansion has been specified using DEFCAS, DEFINE-CAS-EXPANDER, or for which a CAS-function has been defined. (See SB-EXT:CAS for more information.)

Undocumented

ATOMIC-INCF (PLACE &OPTIONAL (DELTA 1))