Koexistenz von thread-sicheren und nicht-thread-sicheren Befehlen

Haben Sie schon einmal Methoden verwendet, die sowohl thread-sichere als auch nicht thread-sichere Aufrufe haben, mit Bedingungen, die Befehle überspringen, die nicht thread-sicher sind? Derzeit verhindert der Compiler dies und es wird ein Fehler ausgegeben. Es gibt jedoch eine Option, mit der Sie diese Prüfung deaktivieren können, und dieser Blogbeitrag zeigt Ihnen, wie das geht.


In einer Aufrufer-Methode haben Sie möglicherweise bereits beide Teile des Codes geändert; einen Teil für den präemptiven Modus und den anderen Teil für den kooperativen Modus. In diesem Fall geht der Compiler jedoch davon aus, dass die gesamte Methode nicht thread-sicher ist, auch wenn der kooperative Teil des Codes nicht im präemptiven Modus ausgeführt wird. Die Methoden, die diese Methode aufrufen, werden ebenfalls nicht als thread-sicher angesehen!

Was nun?

Um Ihnen den Übergang vom kooperativen zum präemptiven Modus zu erleichtern, können Sie in 4D jetzt die Thread-Safety-Prüfung des Compilers für Befehle in Teilen des Codes deaktivieren. Dazu setzen Sie einfach die Compiler-Direktive //%T- vor nicht thread-sicheren Code und //%T+ dahinter.

Hier ist ein Beispiel, das vom Compiler als thread-sicher eingestuft wird:

PROCESS PROPERTIES(Current process;$name;$state;$time;$flags)
$isPreemptive :=($flags?? 1)
If ($isPreemptive)
LOG EVENT (Into Windows log events; "Fehler xy ist aufgetreten")
Else
//%T-
DIALOG ("myErrorDialog";New object("message"; "Fehler xy ist aufgetreten"))
//%T+
End if

Wenn Sie nicht thread-sichere Befehle zwischen den //%T- und //%T+ Compiler-Direktiven in einem präemptiven Prozess ausführen, gibt 4D einfach einen Fehler aus.

Avatar
- Product Owner - Damien Fuzeau ist seit Februar 2019 Mitglied des 4D Produktteams. Als Product Owner ist er für das Schreiben von User Stories zuständig, die er dann in funktionale Spezifikationen umsetzt. Zu seinen Aufgaben gehört es auch, dafür zu sorgen, dass die gelieferten Funktionsimplementierungen den Anforderungen der Kunden entsprechen. Damien hat an der Universität von Nantes einen Abschluss in Softwaretechnik gemacht. Er verbrachte mehr als 23 Jahre in seinem früheren Unternehmen, zunächst als Entwickler (er entdeckte 4D im Jahr 1997) und später als technischer Leiter und Softwarearchitekt. Dieses Unternehmen ist ein 4D OEM Partner und hat 4D basierte Geschäftssoftware für Tausende von Usern auf Hunderten von Servern eingesetzt. Damien ist also mit der Entwicklung und dem Einsatz von 4D in einem mehrsprachigen Kontext vertraut.