From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,50d9e417d8370cca X-Google-Attributes: gid103376,public From: Geert Bosch Subject: Re: task safe linked list? Date: 1997/11/23 Message-ID: <6582m6$4t0$1@gonzo.sun3.iaf.nl>#1/1 X-Deja-AN: 291703317 References: <3476167d.24974065@SantaClara01.news.InterNex.Net> Organization: La Calandre Infortunee Newsgroups: comp.lang.ada Date: 1997-11-23T00:00:00+00:00 List-Id: Tom Moran 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