DataObjects() not Thread-safe !?

Hier können die Unterschiede, Fehler und Probleme zwischen den Versionen bzw. bei der Migration besprochen werden

Moderator: Moderatoren

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

DataObjects() not Thread-safe !?

Beitrag von AUGE_OHR »

Andreas Gehrs-Pahl
8. Juli 2017
public.xbase++.generic
Re: TokenInit() TokenNext() ToeknEnd()

...
The same is true for DataObjects(), which should be using Synch Methods, as
accessing complex iVars, like Arrays or Objects -- or executing user-defined
Methods -- from multiple threads can create runtime errors or program hang-
ups, besides inconsistent data.
gruss by OHR
Jimmy
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: DataObjects() not Thread-safe !?

Beitrag von UliTs »

Warum zitierst Du diesen Beitrag?
Und was soll die Frage im Titel? Im Beitrag wird doch explizit gesagt, dass man auch für Data Objects Sync-Methoden definieren kann, oder?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: DataObjects() not Thread-safe !?

Beitrag von brandelh »

dass die nicht threadsave sind ist eine wichtige Aussage, ich hätte damit nicht gerechnet (dass die das nicht sind) ... local ist local !

die sync method wird sich eher auf die aufrufende Methode beziehen, ein dataobjekt hat ja keine Mehtoden. (oder ?)
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DataObjects() not Thread-safe !?

Beitrag von ramses »

Ich verwende eine Public-Variable mit einem DataObject zum Ablegen von Handles und Zusänden in einem WebProgramm.
Dabei habe ich mich schon einige male gewundert wieso das Object zum Teil den Inhalt verloren hat ...

Gruss Carlo
Valar Morghulis

Gruss Carlo
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: DataObjects() not Thread-safe !?

Beitrag von UliTs »

Public Variablen sind natürlich nicht Thread Save!
Das hat nichts mit DataObjects zu tun.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DataObjects() not Thread-safe !?

Beitrag von ramses »

Hallo Uli

Das DataObject muss ja wohin. Wohin würdest du es (das DataObject) den tun damit es Thread-Save ist????


Gruss Carlo
Valar Morghulis

Gruss Carlo
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: DataObjects() not Thread-safe !?

Beitrag von UliTs »

Hallo Carlo,

wenn ich dich richtig verstehe möchtest Du auf eine DataObject-Instanz von verschiedenen Threads aus zugreifen (schreibend und lesend). Dann mußt Du garantieren, dass dies "Thread safe" geschieht. Und das geschieht mit den Sync-Methoden. Ich kann das leider nicht so aus dem Ärmel schütteln aber da müsste man sich einarbeiten.

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DataObjects() not Thread-safe !?

Beitrag von ramses »

Hallo Uli

eine Synch Methode ist bei meinem HTTP Handler (xb2net) nicht vorgesehen und vermutlich auch gar nicht umsetztbar. Ich suche einen anderen Weg ... Schade dass das DataObject nicht Threadsave ist.

Gruss Carlo
Valar Morghulis

Gruss Carlo
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: DataObjects() not Thread-safe !?

Beitrag von UliTs »

ramses hat geschrieben: Do, 13. Jul 2017 10:09 Hallo Uli

eine Synch Methode ist bei meinem HTTP Handler (xb2net) nicht vorgesehen und vermutlich auch gar nicht umsetztbar. Ich suche einen anderen Weg ... Schade dass das DataObject nicht Threadsave ist.

Gruss Carlo
Hallo Carlo,

was spricht denn dagegen statt des DataObject eine Klasse zu verwenden?
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DataObjects() not Thread-safe !?

Beitrag von ramses »

Hallo Uli
was spricht denn dagegen statt des DataObject eine Klasse zu verwenden?
Da bist du ja wieder genau am selben Ort. Der HTTP Handler ist bereits eine Klasse die für jede Web-Anfrage einen Thread aus einem Threadpool mit dem Programmcode startet. Um nicht jedesmal z.B. einen neuen L&L Job zu öffnen muss ich die verschiedenen Handles zur wiederverwendung irgendwo speichern. Vorher hab ich diese in eine DBF geschrieben, jeder Thread hat ja eine eindeutige Nummer das hat gut funktioniert. Aus verschiedenen Gründen wollte ich diese Angaben im Arbeitsspeicher vorhalten. Ich gehe nun zurück zu alten Fassung.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: DataObjects() not Thread-safe !?

Beitrag von brandelh »

Mehrere Threads auf eine L&L Instanz, was soll das bringen außer Mischmasch ?

Ich käme nie auf die Idee eine andere Variablenart als LOCAL zu nutzen, außer es ist readonly z.B. Fixe Werte (dann Public)
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: DataObjects() not Thread-safe !?

Beitrag von Jan »

Ich misch mich da mal quer ein. Ich selber benutze ja auch stapelweise DataObjects. Und hatte damit auch bislang noch nie Probleme - auch nicht in Thread-Anwendungen. Aber klar, bei mir sind die halt alle LOCAL.

Ich kann mir aber irgendwie nicht vorstellen, das Alaska eine für die so wichtige Klasse schreibt und dabei nicht auf Thread-Sicherheit achtet. Seid Ihr sicher, das daran liegt, und nicht an irgendwelchen anderen Dingen?

Ansonsten wäre das doch mal eine Frage an Alaska wert, oder?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DataObjects() not Thread-safe !?

Beitrag von ramses »

Hallo Hubert

L&L war nicht das optimale Beispiel, die erwähnten Thread' müssen immer etwa die gleichen Arbeiten ausführen, da die Thread in einem Pool sind, d.h. beendete Thread auf die erneute Verwendung warten können die Verarbeitungshandles auf die verschiedenen DLL's "aufbewahrt" werden und nicht jedesmal einen neuen Handle anzufordern. Da es bei einigen DLL's zu Sorgen durch dauerndes öffnen/schliessen kam entstand diese Lösung. Bei L&L einigen anderen war es einmal oder ist es sehr wichtig nicht alle Jobs zu schliessen sondern mindestens einen stehen zu lassen.

Gruss Carlo
Valar Morghulis

Gruss Carlo
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DataObjects() not Thread-safe !?

Beitrag von ramses »

Hallo Jan

Nein, sicher bin ich mir nicht.
Es ist mir beim Testen aufgefallen dass mein DataObject ab und zu den Inhalt verlor.
Keine Ahnung wieso. Ich habe die spezielle Verwendung des Data-Objects aufgegeben und verwende wieder eine DBF.
Dies deshalb da der Cargo-Slot bereits verwendet ist. Änderungen daran würden einen Umfangreichen Test der gesamten Web-App bedeuten, was ich montan nicht möchte.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: DataObjects() not Thread-safe !?

Beitrag von AUGE_OHR »

Jan hat geschrieben: Do, 13. Jul 2017 12:29Ansonsten wäre das doch mal eine Frage an Alaska wert, oder?
kannst ja im Alaska Forum unter dem o.g. Thread nachfragen "was" AGP mit seiner Antwort meint.
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: DataObjects() not Thread-safe !?

Beitrag von Jan »

Frank hat in der betreffenden Diskussion auf Andreas geantwortet und bestätigt, das die DataObjects grundsätzlich erst einmal thread safe seien.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DataObjects() not Thread-safe !?

Beitrag von ramses »

Ich habe rausgefunden wann es mir das DatObject zerschiesst. Der Ablauf ist etwa so: DataObject in einer Public Var anlegen. Xbase-DLL laden, der Code in dieser DLL nutzt das DataObject (fügt) neue Vars ein, dann DLL entladen dann ist oft auch das Dataobject zerstört.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: DataObjects() not Thread-safe !?

Beitrag von brandelh »

wie und warum wird die DLL entladen ?

Bei QuickPDF habe ich die Erfahrung gemacht, dass DLLUNLOAD() den dortigen internen Speicher nicht sauber freigibt und die Anwendung Speicher frisst.
Lasse ich das weg, wird keiner gefressen ... auch nach 10.000 PDFs bleibt der Verbrauch konstant (neues PDF etwas mehr ... nach schließen des PDF wieder alter Wert).
Nach Ende der EXE ist alles aus dem Speicher.
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DataObjects() not Thread-safe !?

Beitrag von ramses »

Hallo Hubert

das Laden und Entladen von in Xbase geschriebenem Code ist Teil des Entwicklungs und Test Konzeptes von xb2net für Web-App's. Dies vereinfacht die Entwicklung und Test ganz extrem. Du kannst etwas in der PRG Datei ändern und im Browser Reload drücken dann wird der Code automatisch neu kompiliert und die alte DLL entladen und die mit dem neuen geänderten Code geladen. Mal so einfach gesagt. In der definitven Version werden die DLL's statisch geladen oder der Code direkt an die EXE gelinkt.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: DataObjects() not Thread-safe !?

Beitrag von brandelh »

ramses hat geschrieben: Fr, 14. Jul 2017 10:21 das Laden und Entladen von in xbase geschriebenem Code ist Teil des Entwicklungs und Test Konzeptes von xb2net für Web-App's.
ah, Xbase++ Dlls, das ist natürlich was anderes :D
Gruß
Hubert
Benutzeravatar
Frank Grossheinrich
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 142
Registriert: Fr, 31. Mär 2017 15:06
Wohnort: Eschborn
Hat sich bedankt: 5 Mal
Danksagung erhalten: 81 Mal
Kontaktdaten:

Re: DataObjects() not Thread-safe !?

Beitrag von Frank Grossheinrich »

ramses hat geschrieben: Fr, 14. Jul 2017 10:02 Ich habe rausgefunden wann es mir das DatObject zerschiesst. Der Ablauf ist etwa so: DataObject in einer Public Var anlegen. Xbase-DLL laden, der Code in dieser DLL nutzt das DataObject (fügt) neue Vars ein, dann DLL entladen dann ist oft auch das Dataobject zerstört.
Ich habe die ein oder andere Frage:
1) werden dann in die iVars auch gleich Werte übertragen?
2) sind diese Werte statische Werte? (also Literale, die statisch im Code stehen)
3) wie ist die DLL gebaut? Was sind die Compiler-Switches und die Link-Switches? (DYNAMIC)

Ich wäre BRENNEND an einem Beispiel interessiert. Bitte an mich oder an unseren Support!
Danke, Frank
We love Xbase++, and you?
Benutzeravatar
Frank Grossheinrich
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 142
Registriert: Fr, 31. Mär 2017 15:06
Wohnort: Eschborn
Hat sich bedankt: 5 Mal
Danksagung erhalten: 81 Mal
Kontaktdaten:

Re: DataObject()s ARE Thread-safe !!!

Beitrag von Frank Grossheinrich »

Jan hat geschrieben: Fr, 14. Jul 2017 6:22 Frank hat in der betreffenden Diskussion auf Andreas geantwortet und bestätigt, das die DataObjects grundsätzlich erst einmal thread safe seien.
Bitte stellt doch solche Fragen bei uns in der Newsgroup.
DataObject() sind thread-safe! Wie alles in Xbase++! Wenn dem so nicht ist, dann ist das ein Fehler und muss behoben werden!

Was ist thread-safe? Ich habe den Eindruck, dass ihr den Begriff falsch verwendet. Und sich da etwas Falsches im Kopf manifestiert.
Thread-safe bedeutet, dass ihr eine Variable (DataObject() oder was auch immer) über Threads hinweg lesen und schreiben könnt und euch das Ganze nicht um die Ohren fliegt. Ihr müsst euch nicht darum kümmern, ob gerade 10 Threads gleichzeitig auf einer Variablen "rumnageln". Das nimmt euch die Xbase++ Runtime ab. Aber dass die Variable verändert werden kann und mit welchem Inhalt zu welcher Zeit, dafür seid ihr zuständig. Threads sind auch nicht deterministisch. Wenn die Reihenfolge wichtig ist, wann was abgearbeitet werden soll, dann müsst ihr Vorsorge treffen.

Im Umkehrschluss: thread-safe bedeutet NICHT, dass eine Variable geschützt ist in einem anderen Thread.

Und auch, wenn ich Andreas Gehrs-Pahl sehr schätze, er hat nicht immer recht.

Gruß, Frank
We love Xbase++, and you?
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DataObjects() not Thread-safe !?

Beitrag von ramses »

Hallo Frank

zu deinen Fragen:
1) werden dann in die iVars auch gleich Werte übertragen?
Ja, es sind verschiedene Nummerischen Werte sowie einige Arrays. Es werden alle mit Daten bestückt.
2) sind diese Werte statische Werte? (also Literale, die statisch im Code stehen)
Nein, es sind alles Werte die aus local oder static Vars übertragen werden.
3) wie ist die DLL gebaut? Was sind die Compiler-Switches und die Link-Switches? (DYNAMIC)
XPP %1%2.prg /o%1 /a /m /n /q /v /err:3 /dll:dynamic /link:"/dll /out:%1%2.dll" 2>nul

Das DataObject() wird leer beim Programmstart angelegt und danach in der beschriebenen DLL mit Werten befüllt wenn diese Werte noch nicht vorhanden sind.

Für meine Zwecke erstelle ich nun das DataObject() beim erneuten laden der DLL einfach neu. So ist das Problem während der Entwicklung beseitigt.

Leider kann die News-Gruppe nicht mit einem Browser besucht werden .... deshalb kann ich da nicht mitlesen/schreiben.
Ein extra Programm dazu installieren kommt für mich gar nicht in Frage.... das ist ja wie vor 20 Jahren .....

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: DataObjects() not Thread-safe !?

Beitrag von Martin Altmann »

Moin Carlo,
ramses hat geschrieben:Leider kann die News-Gruppe nicht mit einem Browser besucht werden ....
:arrow: http://news.alaska-software.com/

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: DataObjects() not Thread-safe !?

Beitrag von ramses »

Hallo Martin

Danke für den Tip.
Hab ich nicht gewusst/versucht. Auf der Alaska Seite steht: "So richten Windows Live / Thunderbird für Newsgruppen ein" ich dachte es sei noch wie früher, es ohne News Reader nicht geht. Aber mir gefällt es hier viel besser....

Gruss Carlo
Valar Morghulis

Gruss Carlo
Antworten

Zurück zu „Unterschiede Version 1.9 <-> 2.0“