ALLOW
L'istruzione ALLOW
è l'opposto della funzione FORBID
. Mentre FORBID
blocca completamente il multitasking, ALLOW
lo riattiva, consentendo a ugBASIC
di pianificare nuovamente l'esecuzione di altri task, passando l'esecuzione da un
task all'altro in base alla sua politica di pianificazione. Se una PROCEDURE
ha precedentemente chiamato FORBID
per garantire l'accesso esclusivo alla CPU,
ALLOW
restituisce il controllo alle altre procedure, consentendo ad altre
procedure di continuare l'esecuzione.
Nota che questo tipo di controllo è “statico”: in altre parole, la compilazione
si interromperà se la procedura che ha chiamato FORBID
desidera successivamente
chiamare una funzione che richiederebbe l'attivazione del multitasking. La chiamata
a ALLOW
ripristinerà il multitasking e consentirà la chiamata di routine di
questo tipo.
Una volta che una procedura ha terminato di eseguire una sezione di codice che
richiedeva l'accesso esclusivo al processore, dovrebbe chiamare ALLOW
per
consentire l'esecuzione di altre attività.
Se un'attività deve attendere un evento (ad esempio, un segnale), può chiamare
ALLOW
prima di entrare in uno stato di attesa, consentendo ad altre attività
di eseguire il loro codice mentre l'attività di attesa è sospesa.
Utilizzare FORBID
e ALLOW
in modo equilibrato è essenziale per ottenere
sia buone prestazioni che una corretta sincronizzazione tra procedure parallele.
In molti casi, meccanismi di sincronizzazione più sofisticati, come le variabili
condivise, potrebbero essere utilizzati senza disabilitare completamente il
multitasking.
PARALLEL PROCEDURE test FORBID ' busy waiting, multitasking is suspended! FOR i=0 TO 1000: WAIT 1 MS : NEXT i ALLOW END PROC
Alw
Se si riscontra un problema nell'utilizzare questo comando, se si ritiene che vi sia un bug oppure che la spiegazione sia poco chiara, è possibile aprire una segnalazione per questa parola chiave su GitHub. Grazie!