public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "nicola at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug libobjc/47031] libobjc uses mutexes for properties
Date: Sat, 08 Jan 2011 13:43:00 -0000 [thread overview]
Message-ID: <bug-47031-4-6GFws3kFwD@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-47031-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47031
--- Comment #7 from Nicola Pero <nicola at gcc dot gnu.org> 2011-01-08 11:39:38 UTC ---
> Usually, the lock is not held. If it is, you do a little trick: You spin 10
> times and if you still could not get the lock, it's likely the current thread
> is blocking another thread from releasing the spinlock. Again, quite unlikely,
> as the spinlock is only held for an extremely short amount of time. However,
> if it happens that after 10 spins you still could not get the lock, you call
> sched_yield() to NOT waste resources.
>
> So, in the worst case, you waste 10 spins. That's basically 10 compares.
> That's nothing compared to a user/kernelspace switch, which is often 10 times
> more.
Well, but locking a mutex on Linux is implemented on top of futexes and does
not require a user/kernelspace switch unless the lock is already held (in which
case a spinlock requires a switch too). ;-)
So, basically on Linux the standard mutexes are already optimized and perform
not as fast but almost as fast as spinlocks in the uncontended case, but
without the problems of spinlocks in the contented case (my benchmarks confirm
that; there is nothing like the 10x difference you mention in the uncontented
case). :-)
Maybe you benchmarked or used other platforms in the past; and you may have a
very good point there. If objc_mutex_lock() and objc_mutex_unlock() actually
do
always perform a system call each on some systems, the mutex-protected accessor
could be so much slower (100x ?) than the spinlock-protected accessor (in the
non-contented case) that it may make sense to multiply the number of accessor
locks (say, to 64) to reduce the chance of contention and then use spinlocks
there. :-)
On the other hand, mutexes are easy to port, have been ported and are known
to work well out of the box, so in terms of maintenance of other platforms I
wouldn't mind sticking with them for all the other, less-used platforms too.
They may not be fast, but at least they always work. ;-)
It would still be good to try a worst-case benchmark of spinlocks in the highly
contended case. I am assuming the performance would be really really bad, but
then I may just be wrong. ;-)
Thanks
next prev parent reply other threads:[~2011-01-08 11:39 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-21 11:42 [Bug libobjc/47031] New: " js-gcc at webkeks dot org
2010-12-21 11:47 ` [Bug libobjc/47031] " nicola at gcc dot gnu.org
2010-12-29 16:11 ` nicola at gcc dot gnu.org
2011-01-01 12:07 ` js-gcc at webkeks dot org
2011-01-07 18:11 ` nicola at gcc dot gnu.org
2011-01-07 18:30 ` nicola at gcc dot gnu.org
2011-01-07 18:44 ` js-gcc at webkeks dot org
2011-01-08 13:43 ` nicola at gcc dot gnu.org [this message]
2011-01-08 16:34 ` js-gcc at webkeks dot org
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=bug-47031-4-6GFws3kFwD@http.gcc.gnu.org/bugzilla/ \
--to=gcc-bugzilla@gcc.gnu.org \
--cc=gcc-bugs@gcc.gnu.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).