comp.lang.ada
 help / color / mirror / Atom feed
From: NiGHTS <nights@unku.us>
Subject: Timeouts in Ada
Date: Wed, 16 Jul 2014 22:18:18 -0700 (PDT)
Date: 2014-07-16T22:18:18-07:00	[thread overview]
Message-ID: <50bdb713-7ce1-411b-810b-9bdee1d26b7a@googlegroups.com> (raw)

First of all I just want to say how much I appreciate the help you have given me so far with the questions I have had.

For this next question I am interested in creating a "wrapper" around certain tasks that should have a timeout period. I feel this feature is part of what makes Ada so good at keeping a software running stable. There are plenty of network and I/O tasks that I would love to have a "fallback" plan in the event that they take too long to execute. 

For study on this subject I am using this as a reference:

http://en.wikibooks.org/wiki/Ada_Programming/Tasking#Timeout

I am looking at Ex. 10. 

  task Password_Server is
     entry Check (User, Pass : in String; Valid : out Boolean);
     entry Set (User, Pass : in  String);
  end Password_Server;
  ...
  User_Name, Password : String (1 .. 8);
  ...
  Put ("Please give your new password:");
  Get_Line (Password);
  select
     Password_Server.Set (User_Name, Password);
     Put_Line ("Done");
  or
     delay 10.0;
     Put_Line ("The system is busy now, please try again later.");
  end select;


Now as an Ada beginner with a strong background in C/Asm I interpret this example in the following way...

1. "select" creates a thread which runs the body of "select" or the body of "or". Or maybe it creates two threads for each and blocks its own thread until one finishes.

2. In either case the variables in scope where "select" was run will be accessible to both the thread created to deal with the body of "select" and the body of "or"

3. The "Password_Server" task is run in its very own thread so it has its own internal scope of variables. So this would mean that the "select" body is dealing with two nested threads.

4. If the "select" body completes before the "or" body is completed, the "or" thread is terminated. If the "or" body completes before the "select" body completes, the "select" body and the Password_Server (if applicable) is terminated.

5.a. If both threads happen to reach the "Put_Line" command of each body, both threads will terminate and there would be a conflict of information -- It will confuse the user with printing both "Done" AND "The system is busy". If this was a more mission-critical operation, both the main operation and its fallback plan may execute at the same time. In other words I don't see how this is atomic, and if its not atomic how could this possibly be useful to anyone?

5.b. Terminating threads while its doing things (while writing to shared memory? performing network operations mid-way?) sounds disastrous, but it seems like the only way this could possibly function in Ada.

Now keep in mind these are all assumptions I made in order to make sense of what I am reading. So far in my self-study of Ada 80% of everything had to be assumed with the help of trial and error because no literature that I have read explained WHY things happen, only superficial usage syntax. Its rather annoying but that is why I am so thrilled to be able to ask this question here.

Thank you again for all your help!

             reply	other threads:[~2014-07-17  5:18 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-17  5:18 NiGHTS [this message]
2014-07-17  7:08 ` Timeouts in Ada Simon Wright
2014-07-17  8:35   ` NiGHTS
2014-07-21 23:34   ` Randy Brukardt
2014-07-22  1:11     ` Shark8
2014-07-22  7:39       ` J-P. Rosen
2014-07-22  8:31         ` Simon Wright
2014-07-22 21:52       ` Randy Brukardt
2014-07-17  7:38 ` J-P. Rosen
2014-07-17  8:40   ` NiGHTS
2014-07-17 10:00     ` J-P. Rosen
2014-07-17 19:27   ` Jeffrey Carter
2014-07-17 19:51     ` J-P. Rosen
2014-07-17 20:52       ` Jeffrey Carter
2014-07-17 20:29     ` Adam Beneschan
2014-07-17 20:52       ` J-P. Rosen
2014-07-21 23:44         ` Randy Brukardt
2014-07-17 20:43     ` Jeffrey Carter
2014-07-21 23:37   ` Randy Brukardt
2014-07-17  7:42 ` Dmitry A. Kazakov
2014-07-17  8:59   ` NiGHTS
2014-07-17  9:48     ` Dmitry A. Kazakov
2014-07-17 17:10       ` NiGHTS
2014-07-17 20:45         ` Dmitry A. Kazakov
2014-07-17 16:12 ` Adam Beneschan
2014-07-17 16:46   ` NiGHTS
2014-07-17 17:11     ` Simon Wright
2014-07-17 17:58       ` NiGHTS
2014-07-17 19:02         ` Jeffrey Carter
2014-07-17 18:58       ` Jeffrey Carter
2014-07-17 18:12     ` Adam Beneschan
2014-07-17 19:27       ` Jeffrey Carter
2014-07-17 18:56     ` Jeffrey Carter
2014-07-23 22:37     ` Robert A Duff
2014-07-24  9:23       ` AdaMagica
2014-07-24 15:37         ` Robert A Duff
2014-07-25  5:16           ` Randy Brukardt
2014-07-25  9:11           ` AdaMagica
2014-07-25 16:15             ` Brad Moore
2014-07-25 16:34             ` Dmitry A. Kazakov
2014-07-17 19:27 ` Jeffrey Carter
replies disabled

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