comp.lang.ada
 help / color / mirror / Atom feed
From: "Warren W. Gay VE3WWG" <ve3wwg@cogeco.ca>
Subject: Re: new_line in a put_line
Date: Wed, 04 Dec 2002 12:43:46 -0500
Date: 2002-12-04T12:43:46-05:00	[thread overview]
Message-ID: <3DEE3ED2.7070009@cogeco.ca> (raw)
In-Reply-To: 3DEE33A5.8080709@acm.org

Jeffrey Carter wrote:
> Stephen Leake wrote:
>> Assuming Lock is a controlled type, that releases the lock in
>> Finalize, this [using a semaphore] is an excellent design.
> 
...
> Of course, that had more complex requirements than what is being 
> discussed here. Apparently the OP doesn't mind if the tasks are blocked 
> during output, so simply rendezvousing with a task that does the output 
> would solve the problem and be simpler and clearer than the semaphore + 
> protected type approach.

The Rendezvous has the benefit that the request to perform output
is queued. This results in greater efficiency on most platforms
because it avoids having threads wake up and test to see if they
won out on the condition variable set (protected object).

It also guarantees "order". With the protected object approach a
"Johnnie come lately" task could gain access while already blocked
tasks are waiting to gain access -- destroying the waiting line
sequence. This may create some confusing to read "output".

However, the mutex does have one advantage in this scenario. If you
have to perform multiple calls to Text_IO then it makes more sense
to lock, perform I/O and then unlock. For example:

Lock;
New_Line;
Put_line("Hello World");
Unlock;

You could implement Lock and Unlock using the Rendevous however.
-- 
Warren W. Gay VE3WWG
http://home.cogeco.ca/~ve3wwg
Need to clean up your PATH or LD_LIBRARY_PATH? Try unique_path at
http://home.cogeco.ca/~ve3wwg/unique_path (awk script)




  parent reply	other threads:[~2002-12-04 17:43 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-12-02  5:36 new_line in a put_line Vlad
2002-12-02  9:47 ` Preben Randhol
2002-12-02 17:04   ` Frank J. Lhota
2002-12-05 11:10     ` Preben Randhol
2002-12-02 10:14 ` Dmitry A. Kazakov
2002-12-02 14:57 ` Matthew Heaney
2002-12-03 11:33   ` Fraser Wilson
2002-12-03 15:01     ` Dmitry A. Kazakov
2002-12-04  9:31       ` Fraser Wilson
2002-12-04 14:10         ` Dmitry A. Kazakov
2002-12-04 15:23           ` Robert A Duff
2002-12-04 16:15             ` Dmitry A. Kazakov
2002-12-04 18:11               ` tmoran
2002-12-04 20:21                 ` Simon Wright
2002-12-05  9:36                 ` Dmitry A. Kazakov
2002-12-05 22:40                   ` tmoran
2002-12-04 15:25           ` Stephen Leake
2002-12-04 16:55             ` Jeffrey Carter
2002-12-04 17:24               ` Stephen Leake
2002-12-04 17:43               ` Warren W. Gay VE3WWG [this message]
2002-12-05  1:31                 ` Jeffrey Carter
2002-12-05 18:11                   ` Warren W. Gay VE3WWG
2002-12-02 15:49 ` Robert A Duff
  -- strict thread matches above, loose matches on Subject: below --
2002-12-03 11:52 Grein, Christoph
2002-12-04  9:39 ` Fraser Wilson
2002-12-04 10:03 Grein, Christoph
2002-12-05  6:16 Grein, Christoph
2002-12-05  9:44 ` Dmitry A. Kazakov
2002-12-05  6:28 Grein, Christoph
2002-12-05 14:19 ` Stephen Leake
replies disabled

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