From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Deallocating records with task type fields.
Date: Sat, 10 Dec 2005 15:10:50 +0100
Date: 2005-12-10T15:10:33+01:00 [thread overview]
Message-ID: <1vb61utj75dws.gjbmfyig7vzz.dlg@40tude.net> (raw)
In-Reply-To: 1134168554.826805.70690@g49g2000cwa.googlegroups.com
On 9 Dec 2005 14:49:14 -0800, Gene wrote:
> Please consider these declarations for a task with some task local
> data:
>
> type Listener_Type;
>
> task type Listener_Task_Type(Env : access Listener_Type);
>
> type Listener_Type is
> record
> Port : Positive;
> Executive : Listener_Task_Type(Listener_Type'Access);
> end record;
>
> With this, the executive task has access to the task local environment
> exemplified here by a port number.
>
> Here are the questions:
>
> 1. Is this a good idiom for implementing task local data, or is there
> some other preferable method?
>
> 2. As I read the ALRM it is incorrect to deallocate a Listener_Type
> object until the Executive task has exited. What is a good idiomatic
> way for the Executive to deallocate its own task local storage just
> before it exits and without causing a race condition? [The only ways I
> can come up with seem like excessive machinery.]
Not really. If data are local then it is task's responsibility to maintain
them. Your design inverses this: the life span of environment must enclose
one of the task. I presume that you are trying to bring parameters of a
task and the local data under one roof. It can work in only simple cases.
Possible alternatives:
1. Local things are on the task's stack. Parameters are passed through
discriminants.
2. Same as above, but parameters are passed via Start entry point
3. Task is encapsulated into a controlled object which has the parameters
and data. A pragmatic way to do this is to have a task pointer as a
component, so that task might be allocated separately from the object.
Otherwise, there will be problems with initialization and finalization.
4. Smart pointers with reference counting. If you want to create a resource
(like local data) for a task in one place and collect it in another (upon
task exit) then smart pointers is a safe way to do it.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2005-12-10 14:10 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-12-09 22:49 Deallocating records with task type fields Gene
2005-12-10 7:16 ` Jeffrey R. Carter
2005-12-10 11:45 ` Simon Wright
2005-12-10 14:10 ` Dmitry A. Kazakov [this message]
2005-12-11 4:06 ` Gene
2005-12-11 11:50 ` Dmitry A. Kazakov
2005-12-12 11:32 ` Alex R. Mosteo
2005-12-12 18:30 ` Pascal Obry
2005-12-13 10:22 ` Alex R. Mosteo
2005-12-12 22:03 ` Randy Brukardt
2005-12-11 5:02 ` Gene
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox