TEAM-ADA Archives

Team Ada: Ada Programming Language Advocacy

TEAM-ADA@LISTSERV.ACM.ORG

Options: Use Classic View

Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Topic: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Samuel Mize <[log in to unmask]>
Wed, 5 Nov 1997 09:38:03 -0600
text/plain (56 lines)
Peter Hermann wrote:
>
> [topic moved from chat to team-ada]
>
> > >add a delay 0.0 to allow switching ...
> > I don't have an RM handy, but I recall you technically need something
> > like delay duration'small or something to force a task switch.
>
> I remember I once was very disappointed about the language
> definition not to allow for a zero time break point  :-(

HAZY RECOLLECTION:
I believe it was not required in Ada 83 that a "delay 0.0" provide a
task rescheduling opportunity.  My guess is that they didn't realize
it would be an issue.  There was not a large body of work on
in-language concurrency to go by, at the time.
END HAZY RECOLLECTION

In Ada 95, IF your implementation is compliant with the real-time
Annex (D), a "delay 0.0" or even "delay -t" would provide one, and in
the default task dispatching policy will cede the processor to another
ready task of the same priority (D.2.2(11)).

If your implementation is NOT compliant with Annex D, you get vendor's
pot luck for scheduling procedures.

> A "delay 0.0" should be a potential break, what else?
> Give me one reason not to do so.

I agree, but there IS a reasonable argument on the other side.

A computed delay often means "wait until something else is ready."  If
the computed delay is zero or negative, it means that the other thing
is ready now, and you can go on.  If task rescheduling is expensive in
run time, the implementation could reasonably test the delay first,
and if it's zero or less just continue.  This is a time optimization,
and many users carp about wanting every picosecond of performance they
can get, so they should be glad to skip a task rescheduling.

This line of reasoning caused problems for a significant chunk of the
user community, who wanted a way to explicitly let the tasks
reschedule.  So, the Ada 95 standard made clear what behavior is
preferred, at least for real-time compliant implementations.

(A REALLY savvy compiler writer might reschedule on an explicit "delay
0.0", but not on a computed "delay [expression]" where [expression]
evaluates to 0.0.  I don't know if anyone did this.  If so, it was
implementation-dependent, and you couldn't count on it.)

Best,
Sam Mize

--
Samuel Mize -- [log in to unmask] -- Team Ada
(personal net account)

ATOM RSS1 RSS2