Seite 1 von 1

Ist auf Elemente einer LL direkt zugreifen OK?

Verfasst: 26.10.2014 22:08
von KeyKon
Nach langer PureBasic-Abstinenz arbeite ich derzeit mal wieder an einem kleinen Tool.
Dazu habe ich eine kurze Verständnisfrage:

Ich habe eine strukturierte LinkedList auf die ich sehr viel zugreife, um jetzt das ständige hin und herspringen in der Liste zu vermeiden übertrage ich die zur Zeit in Beabreitung stehenden Elemente in Zeiger um direkt auf sie zugreifen zu können während ich trotzdem noch durch die Liste gehen kann:

Code: Alles auswählen

NewList liste.struktur()
Define *elementMarker.struktur
...
*elementMarker = @liste()
Das funktioniert bisher einwandfrei, da in dieser Liste keine Elemente gelöscht werden, nun einige Fragen dazu:
- Ist das so in Ordnung oder kann es passieren dass Elemente ihre Adresse ändern? (z.B beim Ändern der Reihnfolge)
- Kann ich diese Marker ohne Gefahr in Threads verwenden, während ich in der Liste rumwurschtle (bei aktiviertem ThreadSafe)
- Gibt es eine Möglichkeit sicherzustellen dass der Zeiger (noch) auf ein korrektes Element zeigt? Sprich kann ich überprüfen ob das Element noch existiert ohne es in der Liste zu suchen?

Oder Allgemein, gibt es bessere Möglichkeiten mit so etwas umzugehen (Mal von Arrays abgesehen)

LG KeyKon

Re: Ist auf Elemente einer LL direkt zugreifen OK?

Verfasst: 26.10.2014 22:20
von NicTheQuick
KeyKon hat geschrieben:- Ist das so in Ordnung oder kann es passieren dass Elemente ihre Adresse ändern? (z.B beim Ändern der Reihnfolge)
Die Elemente ändern ihre Adresse nicht, solange sie nicht gelöscht und neu erstellt werden. Ich habe es zwar nicht überprüft, aber sollte sich die Adresse eines Elements ändern, nachdem es an eine andere Stelle in der LinkedList bewegt wurde, wurde der Algorithmus von PB falsch programmiert. Und davon gehe ich nicht aus.
- Kann ich diese Marker ohne Gefahr in Threads verwenden, während ich in der Liste rumwurschtle (bei aktiviertem ThreadSafe)
Solange du mit "rumwurschteln" nur meinst, dass du die Daten, die an den Elementen hängen, änderst, wird es keine Probleme geben. Auch die Reihenfolge der Elemente darf geändert werden, aber nur von einem Thread gleichzeitig. Und beim Zugriff auf die Daten sollte sichergestellt sein, dass diese mit einem Mutex geschützt sind. Alles andere wäre unsauber und kann früher oder später zu unvorhergesehenem Verhalten führen.
- Gibt es eine Möglichkeit sicherzustellen dass der Zeiger (noch) auf ein korrektes Element zeigt? Sprich kann ich überprüfen ob das Element noch existiert ohne es in der Liste zu suchen?
Mir ist keine bekannt.
Oder Allgemein, gibt es bessere Möglichkeiten mit so etwas umzugehen (Mal von Arrays abgesehen)
Da ich nicht genau weiß, was du tatsächlich vor hast, ist das schwer zu beantworten.

Re: Ist auf Elemente einer LL direkt zugreifen OK?

Verfasst: 26.10.2014 22:30
von KeyKon
NicTheQuick hat geschrieben:Da ich nicht genau weiß, was du tatsächlich vor hast, ist das schwer zu beantworten.
In erster Linie geht es mir nur darum Daten eines Elements mit anderen der Liste zu vergleichen und zu verrechnen, und ich will mir schlicht sparen dafür Zwischenvariablen zu nehmen die ich dann am Ende wieder in die Liste eintragen müsste.

In einem anderen Szenario läuft ein Thread der im Hintergrund Daten lädt/verrechnet und die Ergebnisse in das gemerkte Element der Liste einträgt, während ich in der Main auf die Daten zugreifen kann sobald sie da sind, dabei hat jedes Element seinen eigenen Mutex damit man nicht auf das Element zugreifen kann während dort Daten eingetragen werden.

LG KeyKon