[haiku-commits] Re: BRANCH pdziepak-github.lock_elision [a18aae1] in src/system/libroot/os/arch: m68k x86 x86_64 arm ppc

  • From: Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 23 Jul 2013 00:30:07 +0200

On 07/23/2013 12:03 AM, Pawel Dziepak wrote:
would be a good idea (while atomic_set{,64}_aligned() becomes
atomic_set{,64}().).
Can't it return the old value as well to join the club? :-)
Unfortunately, no. On x86(_64) to atomically set a value all we need
is a simple mov instruction since all writes and reads to naturally
aligned memory locations are guaranteed to be atomic. If we want to
get the old value we need to use xchg instruction, which is more
expensive than a simple mov. That's why I though about having both
atomic_set() and atomic_xchg().

Ah, now I see where you're coming from.
Since we added those calls ourselves, we're free to define how they work, at least, and having them both sounds beneficial.

However, 'xchg' would pretty much violate our coding style guide (and sounds x86 specific, too), so atomic_exchange() or even atomic_get_and_set() would be preferable. I think atomic_set(), and atomic_set64() should be consistent, though, so whatever you end up naming that exchange function, it should probably exist in 32 and 64 bit versions.

Bye,
   Axel.


Other related posts: