tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: 2*(void *) atomic swap?



   Date: Thu, 30 Jul 2015 11:03:43 -0700
   From: Dennis Ferguson <dennis.c.ferguson%gmail.com@localhost>

   On 30 Jul, 2015, at 01:53 , Maxime Villard <max%M00nBSD.net@localhost> wrote:
   > Do we have a magic function that can perform two atomic_swap_ptr()
   > atomically?

   I don't think you can have a portable function like that.

Not that hard:

- On i386, use cmpxchg8b.
- On amd64, use cmpxchg16b.
- On ll/sc machines, use ll/sc.
- On uniprocessor machines, use RAS.
- On multiprocessor sparc and anything else not in the above classes,
  use a hashed locking scheme like we already use for sparc.

However, the last case would require making single-word CAS use the
hashed locking scheme too even if there is a native single-word CAS,
in order to cooperate with double-word CAS -- unless we decide that
the two don't have to agree, just as we reject doing both x++ and
atomic_inc_uint(&x).


Home | Main Index | Thread Index | Old Index