Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Mar 2002 12:47:13 -0800 (PST)
From:      Kelly Yancey <kbyanc@posi.net>
To:        Ian Holsman <freebsd@holsman.net>
Cc:        freebsd-smp@FreeBSD.ORG
Subject:   Re: feature request -- atomic add/dec return the old value
Message-ID:  <20020311122542.J47075-100000@gateway.posi.net>
In-Reply-To: <3C8CD9F5.50507@holsman.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 11 Mar 2002, Ian Holsman wrote:

> hi.
> I'm not sure if this is the right spot to ask,
> but I'd like to see freebsd return a value on it's
> add/subtract atomic functions.
>
> is this hard to implement?
>
> is there a reason not to ?
>

  Because many platforms (including the x86) implement addition and
subtraction instructions which modify the value in-place (whether in memory
or in a register).  To get the behaviour you desire, you can build your own
routine using the existing atomic operations like so (not actually tested):

	static inline int
	atomic_readandadd_int(int *P, int V)
	{
		register int orig;
		register int new;

		do {
			orig = *P;
			new = orig + V;
		} while (!atomic_cmpset_int(P, orig, new);

		return (orig);
	}


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-smp" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020311122542.J47075-100000>