
| Re: Capture verhalten: Funktionen und Threads Kategorie: Programmierung (von Detlef - 19.03.2026 14:02) | ||
| Als Antwort auf Re: Capture verhalten: Funktionen und Threads von Egbert - 10.03.2026 12:58 | ||
| ||
|
Hallo Egbert, danke für den Hinweis. Ich habe tatsächlich eine globale byte Variable in der Software. Also ich speichere die Daten in einer eigenen Datenbank aus einem Array mit Zeiger und zwei Index. Das funktioniert sauber, schnell und verlä�lich. Mit zwei Threads gibt es kein Problem. Nur kommt ein dritter dazu, der die gleiche Funktion zum Datensatz schreiben verwendet, hänge ich ab und zu mutma�lich in einem Capture log. Ich zeige den Code, nur mein Programmierrechner (alt) hat kein Netzwerkzugang! :-) > Hallo Detlef, > > laut Manual erwartet der capture Befehl eine globale (!)byte Variable. > Du verwendest eine globale int Variable. > Vielleicht ist das ein Grund für das Problem. > > Leider lässt sich in deinem Beispiel nicht erkennen, wie du die Daten speicherst. > Sind des einzelne Variablen, sind es Arrays, ... lokal oder global > Da gibt es unterschiedliches Verhalten bei der �bergabe an eine Funktion. > > Gutes Gelingen > Egbert > > > > > > Moin Nochmal, > > > > im Prinzip läuft es auf die Frage hinaus: > > > > Kommt der Compiler damit klar, wenn ich den Capture Bereich in eine Funktion ausgliedere > > und diese Funktion in mehreren Threads verwende? > > > > Vielleicht probiere ich einfach mal aus, die Funktionen threadspezifisch mehrfach anzulegen. > > > > Schönes WE, > > > > Detlef > > > > > Nochmal ohne Fehler: > > > > > > Moin Zusammen, > > > > > > ich hätte eine Frage um sporadisches Verhalten zu erklären. > > > > > > Muss ich die Captures und Releases explizit in die Threads schreiben oder funktioniert es auch > > > über Funktionen? > > > > > > Beispiel: > > > > > > > > > > > > int flag; > > > > > > function update(int a) > > > { > > > capture flag; > > > function updatedata(a); > > > release flag; > > > } > > > > > > thread main() > > > { > > > capture flag; > > > machirgendwasmitdendaten(); > > > release flag; > > > } > > > > > > thread one() > > > { > > > update(1); > > > } > > > > > > thread two() > > > { > > > update(2); > > > } > > > > > > thread three() > > > { > > > update(3); > > > } > > > > > > > > > > > > Wenn diese vier Threads laufen, ist dann sichergestellt, das immer nur in einem Thread die Daten > > > bearbeitet werden? Oder muss ich die Captures und Releases explizit in den Threads erwähnen? > > > > > > Ich habe es so wie oben gezeigt realisisert und kriege sporadisch Fehler, die ich nur damit > > > begründen kann, dass Daten gleichzeitig in zwei threads bearbeitet werden... > > > > > > > > > Beste Grü�e > > > > > > Detlef | ||
Antwort schreiben Antworten: | ||