[#9382] the sign of a number is omitted when squaring it. -2**2 vs (-2)**2 — <noreply@...>

Bugs item #6468, was opened at 2006-11-03 17:25

9 messages 2006/11/03

[#9385] merge YARV into Ruby — SASADA Koichi <ko1@...>

Hi,

42 messages 2006/11/04
[#9405] Re: merge YARV into Ruby — "Kirill Shutemov" <k.shutemov@...> 2006/11/06

On 11/4/06, SASADA Koichi <ko1@atdot.net> wrote:

[#9406] Re: merge YARV into Ruby — Sylvain Joyeux <sylvain.joyeux@...4x.org> 2006/11/06

On Monday 06 November 2006 16:01, Kirill Shutemov wrote:

[#9417] Re: merge YARV into Ruby — Sean Russell <ser@...> 2006/11/06

On Monday 06 November 2006 10:15, Sylvain Joyeux wrote:

[#9428] Re: merge YARV into Ruby — "Kirill Shutemov" <k.shutemov@...> 2006/11/06

On 11/6/06, Sean Russell <ser@germane-software.com> wrote:

[#9402] fast mutexes for 1.8? — MenTaLguY <mental@...>

Many people have been using Thread.critical for locking because Ruby

24 messages 2006/11/06

[#9450] Bikeshed: No more Symbol < String? — Kornelius Kalnbach <murphy@...>

Hi ruby-core!

21 messages 2006/11/07
[#9452] Re: Bikeshed: No more Symbol < String? — Yukihiro Matsumoto <matz@...> 2006/11/07

Hi,

[#9493] Future Plans for Ruby 1.8 Series — URABE Shyouhei <shyouhei@...>

This week Japanese rubyists were talking about the future of ruby_1_8

13 messages 2006/11/09

[#9515] External entropy pool for random number generator — "Kirill Shutemov" <k.shutemov@...>

In the attachment patch which allow to use external entropy pool for

13 messages 2006/11/11
[#9522] Re: External entropy pool for random number generator — "Nobuyoshi Nakada" <nobu@...> 2006/11/13

Hi,

[#9554] Ruby 1.[89].\d+ and beyond. — Hugh Sasse <hgs@...>

I've been thinking about how version numbers are restricting what we can do.

30 messages 2006/11/16
[#9561] Re: Ruby 1.[89].\d+ and beyond. — Eric Hodel <drbrain@...7.net> 2006/11/16

[#9563] Re: Ruby 1.[89].\d+ and beyond. — Hugh Sasse <hgs@...> 2006/11/16

On Fri, 17 Nov 2006, Eric Hodel wrote:

[#9564] Re: Ruby 1.[89].\d+ and beyond. — Eric Hodel <drbrain@...7.net> 2006/11/16

On Nov 16, 2006, at 12:02 PM, Hugh Sasse wrote:

[#9571] Re: Ruby 1.[89].\d+ and beyond. — "Robert Dober" <robert.dober@...> 2006/11/19

On 11/16/06, Eric Hodel <drbrain@segment7.net> wrote:

[#9604] #ancestors never includes the singleton class (inconsistent) — <noreply@...>

Bugs item #6820, was opened at 2006-11-22 08:49

12 messages 2006/11/22
[#9618] Re: [ ruby-Bugs-6820 ] #ancestors never includes the singleton class (inconsistent) — Yukihiro Matsumoto <matz@...> 2006/11/25

Hi,

[#9629] Re: [ ruby-Bugs-6820 ] #ancestors never includes the singleton class (inconsistent) — Sylvain Joyeux <sylvain.joyeux@...4x.org> 2006/11/27

> It is supposed to. Singleton classes (or eigenclasses, if you want to

Re: fast mutexes for 1.8?

From: Brent Roman <brent@...>
Date: 2006-11-12 08:38:42 UTC
List: ruby-core #9520
>On Sun, 2006-11-12 at 07:05 +0900, MenTaLguY wrote:
>> On Wed, 2006-11-08 at 16:47 +0900, Brent Roman wrote:
>> > #BUT...the Mutex is unlocked at this point!!!
>> > #so Ruby's thread scheduler can (and sometimes does)
>> > #allow another thread to lock this mutex
>> > #before thread t runs
>>=20
>> In other words, a non-waiting thread could potentially "jump the queue"
>> and acquire the lock before a waiting thread.
>>=20
>> I've addressed this in my own Mutex implementation and am looking into
>> what might need to be done for condition variables along similar lines.
>
>Addendum: doing some research, it looks like both the Java language
>specification and the pthreads manpages permit threads not in the wait
>set to acquire the lock.
>
>I'm going to revert the changes in my Mutex class, since it's probably
>better if I don't offer guarantees that can't otherwise be met in any of
>stock Ruby 1.8, YARV, or JRuby.
>
>  
>
I was surprised to hear this, so I, too, did some digging.
It's refreshing that this issue
is finally being discussed here on ruby-core!

The way of determining which thread first acquires
a Mutex lock when there are multiple waiters is itself quite
"contentious", as demonstrated by this thread on
comp.programming.threads:

http://groups.google.com/group/comp.programming.threads/browse_thread/thread/d3703aae792a7d18/16c01eac398a1139?&hl=en#16c01eac398a1139

The fast approach is to release the lock, wake all the waiting threads
and let
the thread scheduler (more or less randomly) choose which runs first. 
The fair approach is to pass the lock from the thread releasing it,
directly to the thread that had been waiting the longest for the it. 
It appears that both approaches have been tried at various times
in the history Linux threading library (in glibc). 

I'll take your word that the pthread and Java specs remain silent on
this issue.
My point is that specifying this behavior is critical sometimes.
Even acknowledged threading gurus cannot agree on which approach is
generally superior.  Therefore, I believe Ruby should continue to
allow programmers to define thread sychronization primitives in Ruby,
at some expense of implementation efficiency over native ones.

Unlike Mutexes, the exact semantics of Test-and-Set operations
are simple and unambiguous.  Test-and-Set is
easy to implement and provides the same detailed
level of control over thread sychronization
that Thread.critical otherwise would.

Note that this does not preclude also having a built-in, optimized,
Mutex class
that calls native pthread or Java libraries.  The exact behavior of this
built-in
Ruby Mutex class will, however, be platform dependent.  Some
applications will break on various platforms as a result.

>*MenTaLguY wrote:*
>
>It's worth pointing out that a locking primitive implemented atop a
>"native" mutex and condition variable(s) would likely be faster than one
>implemented atop an atomic test-and-set operation in Ruby, because in
>the latter case you'd need to incur a lot of method calls to do all your
>wait queue management in Ruby (one of the reasons the current Mutex is
>so slow).
>
>  
>
Implementing a "fair" mutex atop a native mutex would require
that the native library and Ruby both manage queues of waiting threads.
So, I cannot see how it will be faster than a "fair" mutex atop O(1)
test-and-set operations, although, the overhead for the
native library's thread queue management will admittedly be quite
small compared to Ruby's.

Am I missing an important point here?

-- 
 Brent Roman
 mailto:brent@mbari.org  http://www.mbari.org/~brent


In This Thread

Prev Next