From: Juho S. <js...@ik...> - 2007-11-06 14:59:14
|
Pascal Costanza <pc...@p-...> writes: > Hi, > > Are a setf on a simple variable, and a setf on a property list (i.e., > a (setf getf)), thread-safe (atomic) operations in SBCL? For the first: Yes, in the sense that if there are two concurrent writers and one reader, the reader will see either the original value, the value written by the first writer, or the value written by the second writer, but not some kind of arbitrary mixture of the values. This is something that is depended on in core SBCL, so it's extremely unlikely that SBCL would ever support threads on an architecture where it's not true. Similar dependencies exist on writes to other places represented by a single word of memory (some types of structure slots, some types of simple-arrays, cars and cdrs of conses, etc). For the second: no, and possibly never will be, since the SBCL policy in general is that applications are responsible for doing their own locking of shared data structures. It's possible that an exception could be made for plists, since it can fairly easily be made atomic without locks. (I also answered in your c.l.l thread. Note that of the failure modes I described in that post, the one of seeing half-written results is not currently possible in SBCL, but the one of insertions being dropped is). -- Juho Snellman |