From: Dmitry A. Kazakov <mailbox@dmitry-kazakov.de>
Subject: Re: new_line in a put_line
Date: Wed, 04 Dec 2002 15:10:59 +0100
Date: 2002-12-04T15:10:59+01:00 [thread overview]
Message-ID: <c72suucb9i88nfdh38466980oc168jriu2@4ax.com> (raw)
In-Reply-To: u1y4yb063.fsf@FWILSON.i-did-not-set--mail-host-address--so-shoot-me
On 04 Dec 2002 10:31:15 +0100, Fraser Wilson
<newsfraser@blancolioni.org> wrote:
>Dmitry A. Kazakov <mailbox@dmitry-kazakov.de> writes:
>
>> Just do not do I/O from them. Define a mutex as a protected object and
>> a spin lock as a controlled type (less troubles with releasing a
>> mutex):
>
>[..]
>
>> procedure Put_Line (Text : String) is
>> Get_It : Lock (Write_Mutex'Access);
>> begin
>> Ada.Text_IO.Put_Line (Text);
>> end Put_Line;
>
>Something inside me rebels at using side-effects from a declaration
>like that.
Right, right. It is also my opinion [there was a thread regarding this
subject in c.l.a] that using unused (:-)) objects probably indicates a
design problem. A task-based design might be better.
> I can't really talk; my database library unlocks objects
>as they go out of scope, but ... well, I know that code gets executed
>in declarations, but I don't necessarily want to be this aware of it.
>
>On the other hand, it's just a monitor, I shouldn't be so scared :)
You might also pack seizing the mutex into a "proxy" object
(File_Channel):
type File_Channel is limited private;
procedure Put (File : in out File_Channel; Text : String);
procedure Put_Line (File : in out File_Channel; Text : String);
procedure New_Line (File : in out File_Channel; Text : String);
...
private
type File_Channel is
new Ada.Finalization.Limited_Controlled with null record;
procedure Initialize (File : in out File_Channel);
procedure Finalize (File : in out File_Channel);
Initialize would seize the mutex, Finalize would release it. Thus only
one instance of File_Channel may exist at a time.
---
Regards,
Dmitry Kazakov
www.dmitry-kazakov.de
next prev parent reply other threads:[~2002-12-04 14:10 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 [this message]
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
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