![]() |
Race Conditions - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Race Conditions (/Thread-Race-Conditions) |
Race Conditions - eg - 22.07.2008 15:15 Na ja, ganz einfach. Bis jetzt war es nur ein Beispiel. Wenn ich aber in der oberen Schleife eine Schnittstelle auslese (z.B. RS232) und da kommen die Daten sehr selten, z.B. jede 10 Sekunden ein Datum. Dann wird dieser Flag nur jede 10 Sekunden updatet. Was macht aber die untere Schleife, die frisst die ganze CPU weg. Race Conditions - Y-P - 22.07.2008 15:38 Wieso denn? Du kannst doch im "False"-Case eine kleine Zeitverzögerung reinbauen. Gruß Markus ' schrieb:Na ja, ganz einfach. Bis jetzt war es nur ein Beispiel. Wenn ich aber in der oberen Schleife eine Schnittstelle auslese (z.B. RS232) und da kommen die Daten sehr selten, z.B. jede 10 Sekunden ein Datum. Dann wird dieser Flag nur jede 10 Sekunden updatet. Was macht aber die untere Schleife, die frisst die ganze CPU weg. Race Conditions - IchSelbst - 23.07.2008 08:06 Ich hab mir mal eure Beispiele angesehen. Die sind aber nur dazu geeignet, ganz bestimmte Race Conditions zu vermeiden. So Sachen, die in Richtung Ablaufsteuerung gehen. Oder sehe ich da was falsch? Unter Race Condition würde ich jetzt zuerst solche Sachen verstehen, wie hier bei WikiPedia beschrieben. Also z.B. das Manipulieren einer Variablen von zwei unabhängigen (While-)Tasks. Wobei die zu schützende Operation natürlich nicht nur ein Increment sein kann. Ich denke da eher an ganze Array-Operationen. Nachtrag: Da hängt ja ganz oben das Beispiel. Allerdings: Dieses Beispiel würde ich nicht unter Race Condition fallen lassen. So wie das Beispiel ist, kann da nämlich nichts falsch werden. Da hinkt halt die Anzeige hinterher. Was im übrigen auch beim DaqMX-Task-Auslesen so ist. Da wird ja auch nur im Raster ausgelesen, sodass die gerade bearbeiteten Daten den tatsächlichen hinterher sind. Race Conditions - eg - 23.07.2008 09:40 Ja, stimme ich zu. Es ist nur eine Art von Race Conditions. Es gibt auch viel mehr Beispiele, wo diese auftreten können. Ich habe nun mein erstes Beispiel als bestes gefunden, das das Verhalten verständlich darstellt. Falls jemand andere schöne Beispiele hat, bitte hier posten. Ich werde die aufsammeln und ein Tutorial dazu schreiben. Wie gesagt, um Race Conditions zu vermeiden, nimmt man Tools aus der Synchronisationspalette. Semaphoren(wie bei Wikipedia vorgeschlagen) gehören allerdings auch dazu. Gruß, eg Race Conditions - IchSelbst - 23.07.2008 09:55 ' schrieb:Falls jemand andere schöne Beispiele hat, bitte hier posten.Ich hab - leider - keine Beispiele. Zitat:Wie gesagt, um Race Conditions zu vermeiden, nimmt man Tools aus der Synchronisationspalette.Ja. Wenn dann so (müsste ich aber erst ankucken). Mit Variablen sowas selbst machen zu wollen, geht per se nicht. Dazu ist die Umgebung nicht geeignet. Lediglich spezielle Fälle wie solche von dir angesprochenen kann man verriegeln. Race Conditions - deicebear - 25.08.2010 08:30 Hallo, da wir ja beim Thema Race Conditions sind, gibt es eine Auflistung aller Fälle, die ein solches Verursachen? Eine Erläuterung gibt es ja hier: http://de.wikipedia.org/wiki/Race_Condition und hier: http://www.labviewportal.eu/viewtopic.php?f=13&t=329 Schaut mal in mein PNG, was ich angehängt habe, ob die paar Variablen schon Race Conditions verursachen? Ich kenn das ja bnoch von Pascal FC oder von Microcontrollern, wenn ein Vorgang eine Variable beschreibt muss jeder weitere in eine Warteschleife bis eine Flanke zur Freigabe fällt, ich bin froh schon + und - mit LabVIEW hinzubekommen ;-D mir graut es schon davor. Können eigentlich Race Conditions Ursache dafür sein, dass sich mein LabVIEWlv85manchmal 15 Min. lang hängt, wenn ich den Stop-Button, nach einem Programmtest, drücke? Oder auch das meine Taktuhr nicht mehr unter 300ms geht, so ein ziehmlich langsamer Programmzyklus? Danke schonmal:)finde man kann über Race Conditions nicht genug aufgeklärt werden :-D Race Conditions - IchSelbst - 25.08.2010 09:08 ' schrieb:da wir ja beim Thema Race Conditions sind, gibt es eine Auflistung aller Fälle, die ein solches Verursachen?Ist mir nicht bekannt. Zitat:Schaut mal in mein PNG, was ich angehängt habe, ob die paar Variablen schon Race Conditions verursachen?Ich bin der Meinung, die Verwendung der Variablen "Array" führt nicht zu ReceConditions. Zitat:Ich kenn das ja bnoch von Pascal FC oder von Microcontrollern, wenn ein Vorgang eine Variable beschreibt muss jeder weitere in eine Warteschleife bis eine Flanke zur Freigabe fällt,"RaceCondition" ist eher als Prinzip zu verstehen - und ist deswegen Programmiersprachen unabhängig. Programmiersprachenabhängig ist lediglich die Wahrscheinlichkeit, eine RaceCondition zu programmieren, und die Möglichkeit, sie zu umgehen. In LV werden RaceConditions vermieden, indem man Drähte zieht anstelle lokale Variablen zu erstellen. Zitat:Können eigentlich Race Conditions Ursache dafür sein, dass sich mein LabVIEWlv85manchmal 15 Min. lang hängt, wenn ich den Stop-Button, nach einem Programmtest, drücke?Als Auswirkung einer Auswirkung einer RaceCondition ist so was möglich. Race Conditions - Lucki - 25.08.2010 11:01 Man kann die Variablen in 2 Schleifen am einfachsten synchronisieren, wenn man die absolute Uhr verwendet. [attachment=28989] Anslonsten würde ich aber sagen: Als Lehrbeispiel zum Thema Race Condition ist das VI ungklücklich gewählt und wenig hilfreich. Daß sich voneinander unabhängige, nicht synchronisierte Schleifen ihre jeweiligen Daten - ganz gleich ob sie aus der anderen Schleife kommen oder von was weiß ich woher - immer erst bei ihren jeweiligen neuen Schleifendurchlauf aktualisieren, ist doch selbstverständlich und hat mit Wettlaufeffekten nun wirklich nichts zu tun. Der Witz an guten Beispielen zum Thems Wettlauferscheinungen ist doch, daß etwas Undefiniertes oder für den Anfänger Überraschendes passiert. Das ist hier überhaupt nicht der Fall. Race Conditions - dimitri84 - 25.08.2010 11:32 ' schrieb:Jaja, lokale Variablen..., die halten sich nicht an den Datenfluss. Und wenn etwas weiter rechts im Blockdiagramm steht, dann wird das noch lange nicht später ausgeführt als der Code weiter links im BD.Das war ein schöner RaceCondotions-Thread wo ein trotteliger Anfänger seine Überraschung erlebt hat ![]() Race Conditions - deicebear - 25.08.2010 14:10 Gibt es einen Weg festzulegen, in welcher Reihenfolge was abgearbeitet wird? Zum Beispiel in einer While-Schleife habe ich 3 Cases und 3 For Schleifen und ich lege fest, pro Zyklus soll erst Case 1, dann 2, dann 3 folgen und dann ForSchleife 3, ForSchleife 2 und zum Schluss ForSchleife 1? So etwas ist wahrscheinlich nicht möglich, oder? |