Coesistenza di comandi thread-safe e non thread-safe

Tradotto automaticamente da Deepl

Avete mai avuto bisogno di usare metodi con chiamate sia thread-safe che non thread-safe, con condizioni che saltano i comandi che non sono thread-safe? Attualmente il compilatore impedisce di farlo e viene lanciato un errore, ma esiste un flag che consente di disabilitare questo controllo e questo post mostra come fare.


In un metodo chiamante, potreste aver già modificato entrambe le parti del codice: una parte per la modalità preemptive e l’altra per la modalità cooperative. In questo caso, però, il compilatore considera che l’intero metodo non è thread-safe, anche se la parte cooperativa del codice non viene eseguita in modalità preemptive. Neanche i metodi che chiamano questo metodo sono considerati thread-safe!

Cosa fare ora?

Per aiutarvi nella transizione da cooperativo a preemptive, 4D vi permette di disabilitare il controllo di thread-safety del compilatore sui comandi in alcune parti del codice. Per farlo, basta inserire la direttiva del compilatore //%T- prima del codice non thread-safe e //%T+ dopo di esso.

Ecco un esempio considerato thread-safe dal compilatore:

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

Se si eseguono comandi non thread-safe tra le direttive del compilatore //%T- e //%T+ in un processo preemptive, 4D lancia semplicemente un errore.

Avatar
- Product Owner -Damien Fuzeau è entrato a far parte del team 4D Product nel febbraio 2019. In qualità di Product Owner, si occupa di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo lavoro consiste anche nell'assicurarsi che le implementazioni delle funzionalità fornite soddisfino le esigenze dei clienti.Damien si è laureato all'Università di Nantes in ingegneria del software. Ha trascorso più di 23 anni nella sua precedente azienda, prima come sviluppatore (scoprendo 4D nel 1997), poi come responsabile dell'ingegneria e architetto software. Questa azienda è un partner OEM di 4D e ha distribuito software aziendali basati su 4D per migliaia di utenti, su centinaia di server. Damien è quindi abituato allo sviluppo e alla distribuzione di 4D in un contesto multilingue.