Koexistence příkazů bezpečných pro vlákna a příkazů, které nejsou bezpečné pro vlákna

Automaticky přeloženo z Deepl

Potřebovali jste někdy použít metody s voláními, která jsou i nejsou bezpečná pro vlákna, s podmínkami, které přeskakují příkazy, které nejsou bezpečné pro vlákna? V současné době tomu překladač brání a vyhodí chybu, nicméně existuje příznak, který vám umožní tuto kontrolu vypnout, a tento příspěvek na blogu vám ukáže, jak na to.


V metodě volajícího jste již možná změnili obě části kódu; jednu část pro preemptivní režim a druhou část pro kooperativní režim. V tomto případě však překladač považuje celou metodu za vláknově bezpečnou, i když kooperativní část kódu není prováděna v preemptivním režimu. Ani metody, které tuto metodu volají, nejsou považovány za thread-safe!

Co teď?

Abychom vám s tímto přechodem z kooperativního na preemptivní režim pomohli, umožňuje nyní 4D vypnout kontrolu bezpečnosti vláken překladačem u příkazů v částech kódu. Chcete-li to provést, stačí před kód, který není bezpečný pro vlákna, umístit direktivu kompilátoru //%T- a za ni //%T+.

Zde je ukázka, kterou překladač považuje za bezpečnou pro vlákna:

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

Pokud mezi direktivami //%T- a //%T+ kompilátoru provedete příkazy, které nejsou bezpečné pro vlákna, v preemptivním procesu, 4D jednoduše vyhodí chybu.

Avatar
• Product Owner • Damien Fuzeau se připojil k týmu 4D Product v únoru 2019. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich následný převod do funkčních specifikací. Jeho úkolem je také zajistit, aby dodávané implementace funkcí vyhovovaly potřebám zákazníků. Damien vystudoval softwarové inženýrství na University of Nantes. Ve své bývalé společnosti strávil více než 23 let, nejprve jako vývojář (objevil 4D v roce 1997) a později jako technický manažer a softwarový architekt. Tato společnost je partnerem 4D OEM a nasadila obchodní software založený na 4D pro tisíce uživatelů na stovkách serverů. Damien je tedy zvyklý na 4D vývoj a nasazení ve vícejazyčném kontextu.