From: Alexander K. <ale...@gm...> - 2007-04-07 15:19:17
|
On 4/7/07, Nikodemus Siivola <nik...@ra...> wrote: > I'm going to commit pretty soon something to get rid of hardcoded slot > indexes in target-thread.lisp: > > DEFINE-STRUCTURE-SLOT-COMPARE-AND-EXCHANGE > > This is well enough for our internal needs, but it just dawned to me > that it would be nice to support CMPXCHG semantics for users too (how > else are they supposed to implement lockless algorithms in Lisp?) > > Any ideas what such an interface should / could look like? > Two things to consider. It should be possible to use cmpxchg16b (on 64-bit), so that you can have some payload in (car x) and do the cmpxchg16b on the full cons. In C, you often encode stuff in the lower bits of a pointer to avoid cmpxchg16b. In lisp, I think cmpxchg16b will be needed more often (still - for 64-bit). Secondly, it would be nice to be able to allocate a cons or something like that that was guaranteed to be on a separate cache line so that you are guaranteed not to have unintended ping-pong effects between CPUs. Alexander |