[#5218] Ruby Book Eng tl, ch1 question — Jon Babcock <jon@...>

13 messages 2000/10/02

[#5404] Object.foo, setters and so on — "Hal E. Fulton" <hal9000@...>

OK, here is what I think I know.

14 messages 2000/10/11

[#5425] Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...>

18 messages 2000/10/11
[#5427] RE: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — OZAWA -Crouton- Sakuro <crouton@...> 2000/10/11

At Thu, 12 Oct 2000 03:49:46 +0900,

[#5429] Re: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...> 2000/10/11

Thanks for the input.

[#5432] Re: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Yasushi Shoji <yashi@...> 2000/10/11

At Thu, 12 Oct 2000 04:53:41 +0900,

[#5516] Re: Some newbye question — ts <decoux@...>

>>>>> "D" == Davide Marchignoli <marchign@di.unipi.it> writes:

80 messages 2000/10/13
[#5531] Re: Some newbye question — matz@... (Yukihiro Matsumoto) 2000/10/14

Hi,

[#5544] Re: Some newbye question — Davide Marchignoli <marchign@...> 2000/10/15

On Sat, 14 Oct 2000, Yukihiro Matsumoto wrote:

[#5576] Re: local variables (nested, in-block, parameters, etc.) — Dave Thomas <Dave@...> 2000/10/16

matz@zetabits.com (Yukihiro Matsumoto) writes:

[#5617] Re: local variables (nested, in-block, parameters, etc.) — "Brian F. Feldman" <green@...> 2000/10/16

Dave Thomas <Dave@thomases.com> wrote:

[#5705] Dynamic languages, SWOT ? — Hugh Sasse Staff Elec Eng <hgs@...>

There has been discussion on this list/group from time to time about

16 messages 2000/10/20
[#5712] Re: Dynamic languages, SWOT ? — Charles Hixson <charleshixsn@...> 2000/10/20

Hugh Sasse Staff Elec Eng wrote:

[#5882] [RFC] Towards a new synchronisation primitive — hipster <hipster@...4all.nl>

Hello fellow rubyists,

21 messages 2000/10/26

[ruby-talk:5900] Re: [RFC] Towards a new synchronisation primitive

From: hipster <hipster@...4all.nl>
Date: 2000-10-27 08:17:05 UTC
List: ruby-talk #5900
On Fri, 27 Oct 2000  06:25:48 +0900, Dave Thomas wrote:
> hipster <hipster@xs4all.nl> writes:
> 
> > Every instance of class Object (and derivatives) can have a lock, or binary
> > semaphore, associated with it. When a method is called on an object that is
> > declared synchronized, or a method declared synchronized is called on an
> > object, or an object lock is explicitly obtained from within a member
> > method, the object becomes locked. The class or method effectively defines
> > a closure within which the lock is held.
>
> 
> What happens if the method actually generates a closure?
> 
>    def synchronized fred
>      str= "hello"
>      return proc { str }
>    end
> 
>    a = fred
> 
> In this case, will the lock be released when fred returns, or when the 
> proc is garbage collected?

Good point. Possible scenario:
- the proc is created with the self lock held, but nothing more
- the proc inherits the synchronized semantics from fred
- when fred ends, the lock is released
- the proc locks fred upon execution and releases it again
  This requires that procs are passed an implicit first parameter,
  namely `self' (like C++), and are thus tied to a specific instance.
  I don't know if this is already the case.

> > Of course the declaration
> > 
> >   def synchronized foo
> >   end
> > 
> > is equivalent to the explicit
> > 
> >   def foo
> >     synchronize{
> >     }
> >   end
> 
> Possibly not, although I'm not sure. Isn't there a different between
> 
>     def foo(a, b = bar())
>       synchronize {
>       }
>     end
> 
> and
> 
>     def synchronized  foo(a, b = bar())
>     end
> 
> if bar() is itself involved in synchronization?

I'd say the point of definition of a method is at the end of the def
expression, before any method body expressions. Therefore only the
method body is subject to sync-behaviour.

> As 'synchronized' effectively gives us monitors, do you have any ideas 
> on implementing condition variables?

I haven't thought about CVs yet.

> Thanks for an interesting piece: I think this could be an interesting
> thread ;-)

Thank you :)

Another issue for discussion: synced inter-method calls. E.g.:

class synchronized Foo
  def a; end
  def b; end
end

and a calls b. The object lock is already taken, and the rules say all
access is blocked until the lock is free. Deadlock. My first thought
is: allow synced methods to call other synced methods. AFAICS,
atomicity is not hurt.

	Michel

In This Thread