comp.lang.ada
 help / color / mirror / Atom feed
From: Laurent Guerby <guerby@acm.org>
Subject: Re: Ada Protected Object Tutorial #1
Date: 1999/12/18
Date: 1999-12-18T20:48:24+00:00	[thread overview]
Message-ID: <86u2lgvumy.fsf@ppp-116-44.villette.club-internet.fr> (raw)
In-Reply-To: slrn85npi1.4ps.kaz@ashi.FootPrints.net

kaz@ashi.footprints.net (Kaz Kylheku) writes:
> >This claim is wrong, when you're inside a protected procedure, calls
> >to other protected procedure on the same object are done
> >without locking of course.
> 
> This requires the procedures to be passed information about whether
> the object is locked by this thread or not. For example, a hidden
> parameterr.

No, the Ada compiler can statically make the difference between an
internal and external call. There is no locking involved at all for
internal calls. That is the fundamental point of protected procedures,
they are lightweight and efficient, but you are of course restricted
on what you do inside them.  If you need to do more things, you use an
entry, and then there are locks and all the stuff you mention.

> Another thing that is possible is that the compiler might generate
> two function images: one that assumes the lock and one that does
> not.  When a protected procedure calls another one for the same
> object, the compiler will generate a call to the variant which does
> not acquire the lock.

That is exactly what GNAT does (and I assume other Ada compilers do
the same).

> These solution requires some measure of clairvoyance: what if the
> protected procedure calls into another subsystem which then calls
> back into a protected procedure on the same object? How do you pass
> the ``already_locked'' knowledge across calls to foreign subsystems?

There is no clairvoyance involved, it is just that the Ada language is
designed to allow an efficient implementation of protected
procedures. The language defines as a bounded error when potentially
blocking operation is called from a protected procedure, or when
jumping around brings you back to the original protected object.

See RM 9.5.1 for details.

--LG




  parent reply	other threads:[~1999-12-18  0:00 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-12-15  0:00 Ada Protected Object Tutorial #1 James S. Rogers
1999-12-16  0:00 ` Kaz Kylheku
1999-12-16  0:00   ` James S. Rogers
1999-12-17  0:00     ` Laurent Guerby
1999-12-16  0:00   ` John English
1999-12-16  0:00     ` Ed Falis
1999-12-16  0:00       ` Usenet Poster Boy
1999-12-17  0:00     ` Karel Th�nissen
1999-12-17  0:00       ` Laurent Guerby
1999-12-18  0:00         ` Kaz Kylheku
1999-12-18  0:00           ` Robert A Duff
1999-12-18  0:00             ` Kaz Kylheku
1999-12-18  0:00           ` Laurent Guerby [this message]
1999-12-18  0:00             ` Kaz Kylheku
1999-12-19  0:00               ` Laurent Guerby
1999-12-20  0:00                 ` Stanley R. Allen
1999-12-21  0:00               ` Robert I. Eachus
     [not found]             ` <33qr5scnbs04v391ev4541p5bv48hklg3q@4ax.com>
1999-12-20  0:00               ` Robert A Duff
1999-12-18  0:00         ` Karel Th�nissen
1999-12-18  0:00           ` Laurent Guerby
1999-12-17  0:00       ` Mike Silva
1999-12-24  0:00       ` Kenneth Almquist
1999-12-17  0:00   ` Tucker Taft
1999-12-18  0:00     ` Kaz Kylheku
1999-12-18  0:00       ` Robert A Duff
1999-12-18  0:00         ` Kaz Kylheku
1999-12-19  0:00           ` swhalen
1999-12-19  0:00             ` Kaz Kylheku
1999-12-19  0:00               ` Laurent Guerby
1999-12-19  0:00               ` Robert Dewar
1999-12-20  0:00       ` Vladimir Olensky
1999-12-26  0:00         ` Ehud Lamm
1999-12-26  0:00           ` Robert Dewar
1999-12-26  0:00             ` Kaz Kylheku
1999-12-27  0:00               ` Robert Dewar
1999-12-27  0:00                 ` Jean-Pierre Rosen
1999-12-27  0:00                 ` Richard D Riehle
1999-12-27  0:00                   ` Robert Dewar
1999-12-31  0:00                     ` Richard D Riehle
1999-12-27  0:00               ` Robert Dewar
2000-01-02  0:00             ` Tucker Taft
1999-12-17  0:00   ` Robert A Duff
1999-12-17  0:00     ` Vladimir Olensky
1999-12-17  0:00 ` Robert A Duff
1999-12-18  0:00   ` Kaz Kylheku
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox