Indice

ugBASIC Manuale Utente

ALLOW

SINTASSI

   ALLOW

SCOPO

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.

ESEMPIO

  PARALLEL PROCEDURE test
     FORBID
     ' busy waiting, multitasking is suspended!
     FOR i=0 TO 1000: WAIT 1 MS : NEXT i
     ALLOW
  END PROC

ABBREVIAZIONE

 Alw

DISPONIBILE SU

VEDI ANCHE

FORBID

PROBLEMI?

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!

POWERED BY