public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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

  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