title image


Smiley Re: Mutithread und Zeiger aus Liste
Nö. Ein einfacher iterator ist auch keine geeignete Abstraktion für dein Problem. Du brauchst schon was fetteres;) Ein möglicher Lösungsansatz:



1. Du baust einen Wrapper um die Listenklasse. Die äußere Klasse verwaltet zusätzlich einen Referenzzähler (integer) und ein dirty-flag (bool), beide pro Listenelement.

2. Dann erstellst du eine Iteratorklasse (oder einen Proxy). Zugriff auf die Elemente der äußeren Listenklasse erlaubst du nur über diese Iteratoren. Wenn ein Iterator erstellt wird, wird der zugehörige Referenzzähler des Objektes in der Listenklasse um 1 erhöht (Vorsicht: gilt auch für Kopierkonstruktor und Zuweisungsoperator!) und im Destruktor um 1 vermindert. Ist der Referenzzähler im Destruktor 0, wird das Objekt nur gelöscht, wenn auch das dirty-flag "true" ist. Dieses flag wird wiederum durch eine erase-Memberfunktion der äußeren Listenklasse gesetzt. Dadurch wird sichergestellt, daß der letzte Iterator (der auf dasselbe Objekt verweist) das Objekt löscht, wenn es zuvor aus einem anderen Thread heraus "bitte löschen" markiert wurde (Nach dem Motto: Der letzte macht das Licht aus).

*Alle* Memberfunktionen der Listenklasse und auch die Referenzzähler müssen zur Synchronisation ein entspr. Sperrobjekt setzen.

hth,

BF



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: