From: Andi Kleen <ak@suse.de>
To: Brad Pepers <brad@linuxcanada.com>
Cc: Andi Kleen <ak@suse.de>, linux-kernel@vger.kernel.org
Subject: Re: Multi-threading
Date: Tue, 12 Mar 2002 08:10:02 +0100 [thread overview]
Message-ID: <20020312081002.A14745@wotan.suse.de> (raw)
In-Reply-To: <20020311182111Z310364-889+120750@vger.kernel.org.suse.lists.linux.kernel> <p73zo1e4voi.fsf@oldwotan.suse.de> <20020312000310.DBCF41EDB9@Cantor.suse.de>
In-Reply-To: <20020312000310.DBCF41EDB9@Cantor.suse.de>
On Mon, Mar 11, 2002 at 05:02:50PM -0700, Brad Pepers wrote:
> > atomic_dec_and_return() doesn't strike me as too useful, because
> > it would need to lie to you. When you have a reference count
> > and you unlink the object first from public view you can trust
> > a 0 check (as atomic_dec_and_test does). As long as the object
> > is in public view someone else can change the counts and any
> > "atomic return" of that would be just lying. You can of course
> > always use atomic_read(), but it's not really atomic. I doubt the
> > microsoft equivalent is atomic neither, they are probably equivalent
> > to atomic_inc(); atomic_read(); or atomic_dec(); atomic_read() and
> > some hand weaving.
>
> Apparently the Microsoft one really is in Windows 98 and up (not in 95).
> I've had it explained that the asm code (semi-pseudo code here) is like this:
>
> movl reg, #-1
> lock xadd reg, counter
> decl reg
> movl result, reg
>
> This is in comparison to the current code which does something like this:
>
> lock decl counter
> sete result
>
> I don't see how the first asm code lies to you. It is returning the value as
> it was decremented to and the lock on the xadd keeps it safe.
Just it might change immediately afterwards if you don't remove the
object from public view first. An "atomic" value that you cannot depend
on is not very useful. The Linux convention of using atomic_dec_and_test()
is also only safe when you remove it first, but the dec_and_test encourages
this at least. atomic_inc_and_read() could only be safe when you remove
the object first too, but I don't see how it could be ever useful assuming
you keep the convention that reference count == 0 means freeable object.
>
> > BTW regarding atomic.h: while it is nicely usable on i386 in userspace
> > it isn't completely portable. Some architectures require helper functions
> > that are hard to implement in user space.
>
> Its too bad Linux didn't have a nice wrapper around atom inc/dec/test that
> was completely portable. Do you know what arch's have trouble implementing
> this?
sparc32 at least.
I think pa-risc32 too.
-Andi
next prev parent reply other threads:[~2002-03-12 7:10 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20020311182111Z310364-889+120750@vger.kernel.org.suse.lists.linux.kernel>
2002-03-11 21:54 ` Multi-threading Andi Kleen
2002-03-12 0:02 ` Multi-threading Brad Pepers
[not found] ` <20020312000310.DBCF41EDB9@Cantor.suse.de>
2002-03-12 7:10 ` Andi Kleen [this message]
2002-03-13 7:51 ` Multi-threading David Schwartz
2002-03-13 8:23 ` Multi-threading Andi Kleen
2002-03-13 9:01 ` Multi-threading David Schwartz
2002-03-14 4:50 ` Multi-threading Rusty Russell
2002-03-11 19:36 Multi-threading Dipankar Sarma
2002-03-11 23:53 ` Multi-threading Brad Pepers
-- strict thread matches above, loose matches on Subject: below --
2002-03-11 18:20 Multi-threading Brad Pepers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20020312081002.A14745@wotan.suse.de \
--to=ak@suse.de \
--cc=brad@linuxcanada.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox