LabVIEWForum.de
Probleme mit lokaler Variable - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Probleme mit lokaler Variable (/Thread-Probleme-mit-lokaler-Variable)



Probleme mit lokaler Variable - jojo - 23.01.2009 19:30

Hallo,

ich habe ein recht großes Programm, in dem ich mehrere lokale Variablen benutze. In die gleiche Variable werden in mehreren gleichzeitig ablaufenden While-Schleifen Daten geschrieben und gelesen. Nun wird beim Auslesen der Variable manchmal der „neue“ und manchmal der „alte“ Wert ausgelesen. Wie kann ich dieses Problem lösen? Ich möchte das Lesen und Schreiben zwar nahezu zeitgleich, aber eben doch so versetzt ablaufen lassen, so dass beim Auslesen der Wert gelesen wird, der gerade neu geschrieben wurde.

Das Problem hat mit den schon öfter erwähnten „race conditions“ zu tun, oder?

Würde mich über Eure Hilfe freuen

Gruß
Jojo


Probleme mit lokaler Variable - IchSelbst - 23.01.2009 19:47

' schrieb:Das Problem hat mit den schon öfter erwähnten „race conditions“ zu tun, oder?
Bingo! Also: Im Prinzip Ja.

Eine Lösung: Melder. Diese Lösung ist auf jeden Fall vorzuziehen, wenn Daten zwischen parallelen Strukturen ausgetauscht werden sollen.

Aber: Das Problem, ob bei Meldern oder lokalen Variablen, tritt allerdings nur dann auf, wenn in mehreren parallelen Strukturen die selbe lokale Variable beschrieben werden soll. Lesen ist unkritisch. Parallel Schreiben geht aber prinzipiell nicht. Ist die eine Task nur 1µs schneller, so wird deren Wert durch die langsamere Task überschrieben, egal ob Melder oder lokale Variable.

Lösung: Alle schreibenden Zugriffe in eine Task. Oder wenn applikatiopnstechnisch doch parallel notwendig, möglicherweise Queues nehmen.


Probleme mit lokaler Variable - cb - 23.01.2009 20:09

' schrieb:Das Problem hat mit den schon öfter erwähnten „race conditions“ zu tun, oder?

genau das ...

ich würde versuchen die Schleifen über einen Notifier oder eine Queue zu synchronisieren, die Verzögerung zwischen Daten reinschreiben und auslesen ist minimal, eine lokale Variable wird auch nicht schneller sein ...