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