Seite 1 von 1
LinkedList an Thread übergeben
Verfasst: 25.02.2005 11:47
von Sven
Ich habe eine LinkedList, in die ich vom Hauptprogramm aus unregelmäßig Werte schreibe. Die Liste soll von einem Thread in zyklischen Zeitabständen abgefragt werden, enthaltene Werte sollen verarbeitet und die verarbeiteten Werte aus der Liste gelöscht werden. Also Zugriff auf die LinkedList von Hauptprogramm und Thread.
Nun gibt es immer wieder Warnungen zur "Threadunsicherheit". Wie kann ich die Übergabe an den Thread sicher machen? Hat sowas schon jemand realisiert, gibt es dazu Ideen?
Sven
Verfasst: 25.02.2005 15:33
von MVXA
Linked Lists an Threads übergeben ist ne blöde idee

. Ist zwar möglich aber sinnlos. In PB sind Linked Lists
immer global. Selbst wenn du sie in Proceduren definieren solltest.
Verfasst: 25.02.2005 15:37
von Ynnus
Ob Global oder nicht, es kann doch durchaus der Fall sein, dass man mehrere LinkedListss hat und davon immer eine übergeben will. Möglich wären beide, aber man übergibt eben abhängig von bestimmten Ereignissen nur eine. Dann muss man diese als Parameter übergeben damit die Prozedur da dynamisch sich die jeweilige LinkedList nimmt. Also auch bei Globalen Sachen keine "blöde Idee".
Verfasst: 25.02.2005 16:05
von MVXA
dann halt so:
kopiert in v_LLhWnd den Handle von der LL Test
Verfasst: 25.02.2005 17:32
von bluejoke
Die Überschrift ist ein bischen irreführend.
Es geht hier doch nicht um das übergeben einer LinkedList, sondern um die Threadsicherheit beim Schreibzugriff (Es sollen ja Elemente gelöscht werden)
Verfasst: 27.02.2005 13:28
von Sven
@Bluejoke
Richtig erkannt. Tschuldigung, wenn die Überschrift verwirrend ist. Mit Übergeben ist wirklich nicht das Übergeben in einem Prozedurkopf gemeint, sondern ein Protokoll, Handling..., wie ich die Anforderung "Daten schreiben im Hauptprogramm, Daten lesen und löschen in Thread" sicherstellen kann.
Wäre das zum Beispiel eine Möglichkeit:
Thread anhalten
aktuelle Pos (ListIndex oder @liste) merken
Pos an Ende setzen
neue Daten an Ende zufügen
Pos auf Merker setzen (SelectElement oder direkt @liste)
Thread fortführen
Klingt das plausibel? Hab ich was vergessen?
Sven