comp.lang.ada
 help / color / mirror / Atom feed
From: Geert Bosch <geert@gonzo.sun3.iaf.nl>
Subject: Re: task safe linked list?
Date: 1997/11/23
Date: 1997-11-23T00:00:00+00:00	[thread overview]
Message-ID: <6582m6$4t0$1@gonzo.sun3.iaf.nl> (raw)
In-Reply-To: 3476167d.24974065@SantaClara01.news.InterNex.Net


Tom Moran <tmoran@bix.com> wrote:
   Is there a good way to use Protected Types to make a task safe linked
   list?  I'd like to add/remove things on a dynamice set of lists with a
   protected object to ensure serialized access to the links.  But where
   could the protected object go?  Not in any one node because
   insert/remove is a three-node operation.  Not in any one list root
   because these lists are not rooted, but are linked groups, ie, objects
   a,b,c are linked together as are d and e and I might add f to a,b,c or
   to d,e, or remove b from the former and add it to the latter.  It
   appears I must use a single global lock on "any fiddling with any
   links in any list'.  Any other suggestions? 

I would use a List_Manager protected type with all necessary tree operations.
Then you just call Some_Manager.Insert (New_Node, List) for example.

It is a good idea to make the Node_Type a limited private type and 
put it in a generic package with the List_Manager, so you can be 
sure the list is only accessed through the List_Manager. 

Then you can use multiple instantiations of the package to create
lists that can be accessed concurrently. Since a new instantiation
will create a new node type, you cannot accidently mix nodes.

Have fun!

   Geert




      reply	other threads:[~1997-11-23  0:00 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-11-21  0:00 task safe linked list? Tom Moran
1997-11-23  0:00 ` Geert Bosch [this message]
replies disabled

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