comp.lang.ada
 help / color / mirror / Atom feed
From: "James A. Squire" <m193884@CSEHP3.MDC.COM>
Subject: Question about the need for requeue as described in Rationale
Date: 1996/07/03
Date: 1996-07-03T00:00:00+00:00	[thread overview]
Message-ID: <31DAD51F.40F1@csehp3.mdc.com> (raw)
In-Reply-To: dewar.835359186@schonberg


In the Ada95 Rationale, II.9 "Protected Types", it says the following:

"Our final example introduces the ability to requeue a call on another
entry. It sometimes happens that a service needs to be provided in two
parts and that the calling task has to be suspended after the first part
until conditions are such that the second part can be done. Two entry
calls are then necessary but attempts to program this in Ada 83 usually
run into difficulties; race conditions can arise in the interval between
the calls and there is often unnecessary visibility of the internal
protocol."

It goes on to cite an example which does not represent work that needs
to be provided in two parts, and concludes with this disclaimer:

"The above example has been used for illustration only. The astute
reader will have observed that the condition is not strictly needed
inside Signal; without it the caller will simply always requeue and then
immediately be processed if there are no waiting tasks. But the
condition clarifies the description. Indeed, the very astute reader
might care to note that we can actually program this example in Ada 95
without using requeue at all. A more realistic classic example is the
disk scheduler where a caller is requeued if the head is currently over
the wrong track."

I am trying to understand what problem Requeue is trying to solve and
the above does not help me.  I can see from the example given how it
would be difficult to do the same thing in Ada83, but as I was trying to
describe the Ada83 problem that raised the need for this, I found I
couldn't come up with any good way of describing the problem.

"race conditions can arise in the interval between the calls" - like
what, for example?  A race condition, AFAIK, is where two tasks are both
updating the same data object but act as if they are oblivious to it.
I'm having trouble seeing how that applies in the context in which this
quote was used.

"Indeed, the very astute reader might care to note that we can actually
program this example in Ada 95 without using requeue at all." - Great!
So why was it used if it wasn't needed?  For that matter, how can I do
it in Ada 95 without requeue?

"A more realistic classic example is the disk scheduler where a caller
is requeued if the head is currently over the wrong track." - Gee, then
why didn't they?  I have a feeling I would understand the dilemma a lot
better if they had.

Can anybody help me understand what race conditions can't be avoided in
Ada83 that pertain the situation where a service needs to be provided in
two parts?  (Frankly, if they had said "deadlock" instead, I might have
understood that a bit more)

Thank you.
--
James Squire
MDA Avionics Tools & Processes
ja_squire@csehp3.mdc.com
Opinions expressed here are my own and NOT my company's
"one of these days I'm going to better myself by going to Knight school"
"You'll be a web knight instead of a web page!"




  parent reply	other threads:[~1996-07-03  0:00 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-06-20  0:00 GNAT Codesize Haug Buerger
1996-06-20  0:00 ` James E. Hopper
1996-06-21  0:00 ` Doug Smith
1996-06-21  0:00 ` Robert Dewar
1996-06-24  0:00   ` John McCabe
1996-06-24  0:00     ` John Howard
1996-06-25  0:00       ` David J. Fiander
1996-06-25  0:00       ` Robert Dewar
1996-06-26  0:00     ` Robert Dewar
1996-06-28  0:00       ` John McCabe
1996-06-28  0:00         ` Fergus Henderson
1996-06-29  0:00           ` John McCabe
1996-07-01  0:00             ` Robert Dewar
1996-07-05  0:00               ` John McCabe
1996-07-05  0:00             ` JP Thornley
1996-06-30  0:00         ` Robert Dewar
1996-07-02  0:00           ` John McCabe
1996-07-03  0:00             ` Robert Dewar
1996-06-28  0:00       ` Fergus Henderson
1996-07-01  0:00         ` Michael Feldman
1996-07-03  0:00           ` John McCabe
1996-07-02  0:00         ` John McCabe
1996-07-03  0:00           ` Robert Dewar
1996-07-06  0:00             ` John McCabe
1996-07-06  0:00               ` Michael Feldman
1996-07-06  0:00               ` Robert Dewar
1996-07-08  0:00             ` Gavin Smyth
1996-07-03  0:00   ` James A. Squire [this message]
1996-07-05  0:00     ` Question about the need for requeue as described in Rationale Bo I. Sanden
1996-07-05  0:00       ` progers
1996-07-06  0:00     ` Robert A Duff
1996-07-04  0:00   ` Samuel Tardieu
1996-07-04  0:00     ` Robert Dewar
1996-07-08  0:00   ` James A. Squire
1996-07-09  0:00     ` progers
1996-07-10  0:00     ` Robert A Duff
1996-07-10  0:00       ` progers
1996-07-08  0:00   ` James A. Squire
1996-07-08  0:00     ` Robert A Duff
1996-07-09  0:00     ` Bo I. Sanden
1996-07-08  0:00   ` James A. Squire
1996-07-09  0:00   ` Jon S Anthony
1996-06-21  0:00 ` GNAT Codesize Ralph Paul
1996-07-08  0:00 ` Question about the need for requeue as described in Rationale James A. Squire
replies disabled

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