Coexistence de commandes thread-safe et non-thread-safe

Traduit automatiquement de Deepl

Avez-vous déjà eu besoin d’utiliser des méthodes avec des appels à la fois thread-safe et non thread-safe, avec des conditions qui sautent les commandes qui ne sont pas thread-safe ? Actuellement, le compilateur empêche cette utilisation et une erreur est générée. Cependant, il existe un drapeau qui vous permet de désactiver cette vérification et cet article de blog vous montre comment.


Dans une méthode d’appel, vous avez peut-être déjà modifié les deux parties du code ; une partie pour le mode préemptif et l’autre pour le mode coopératif. Cependant, dans ce cas, le compilateur considère que la méthode entière n’est pas thread-safe, même si la partie coopérative du code n’est pas exécutée en mode préemptif. Les méthodes qui appellent cette méthode ne sont pas non plus considérées comme thread-safe !

Que faire maintenant ?

Pour vous aider à passer du mode coopératif au mode préemptif, 4D vous permet désormais de désactiver la vérification par le compilateur de la sécurité thread des commandes dans certaines parties du code. Pour ce faire, il suffit de placer la directive de compilation //%T- avant le code non thread-safe et //%T+ après.

Voici un exemple qui est considéré comme sûr pour les fils par le compilateur :

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

Si vous exécutez des commandes non thread-safe entre les directives du compilateur //%T- et //%T+ dans un processus préemptif, 4D lance simplement une erreur.

Avatar
- Product Owner -Damien Fuzeau a rejoint l'équipe 4D Product en février 2019. En tant que Product Owner, il est en charge de la rédaction des user stories, puis de leur traduction en spécifications fonctionnelles. Son travail consiste également à s'assurer que les implémentations de fonctionnalités livrées répondent aux besoins des clients.Damien est diplômé de l'Université de Nantes en génie logiciel. Il a passé plus de 23 ans dans son ancienne entreprise, d'abord en tant que développeur (découverte de 4D en 1997), puis en tant que responsable de l'ingénierie et architecte logiciel. Cette société est un partenaire OEM de 4D et a déployé des logiciels d'entreprise basés sur 4D pour des milliers d'utilisateurs, sur des centaines de serveurs. Damien est donc habitué au développement et au déploiement 4D dans un contexte multi-langues.