Available on: all targets
See also: FORBID

ALLOW

The ALLOW instruction is the opposite of the FORBID function. While FORBID completely blocks multitasking, ALLOW re-enables it, allowing ugBASIC to schedule again the execution of other tasks, passing the execution from one task to another according to its scheduling policy. If a PROCEDURE has previously called FORBID to assure exclusive access to the CPU, ALLOW returns control to the other procedures, allowing other procedures to continue execution.

Note that this type of control is "static": in other words, compilation will stop if the procedure that called FORBID subsequently wants to call a function that would require multitasking to be active. The call to ALLOW will restore multitasking, and allow routines of this type to be called.

Once a procedure has finished executing a section of code that required exclusive access to the processor, it should call ALLOW to allow other tasks to be executed.

If a task needs to wait for an event (for example, a signal), it can call ALLOW before entering a waiting state, allowing other tasks to execute their code while the waiting task is suspended.

Using FORBID and ALLOW in a balanced way is essential to achieve both good performance and correct synchronization between parallel procedures. In many cases, more sophisticated synchronization mechanisms, such as shared variables, could be used without completely disabling multitasking.

SYNTAX

 ALLOW


Legend
  • id : identifier
  • type : datatype
  • v : value
  • "..." : string
  • [...] : optional

EXAMPLE

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


ABBREVIATION: Alw

Join BASIC 10Liner Contest with ugBASIC!

An interesting competition is held at the beginning of each year: the BASIC 10Liner Contest. It is possible to use ugBASIC to participate in the next "BASIC10Liner" competition, in the following categories:

  • PUR-120 - A game in 10 lines of max 120 characters (w/abbrev.)
  • EXTREME-256 - A game in 10 lines of max 256 characters (w/abbrev.)
  • SCHAU - Any program in 10 lines of max 256 characters (w/abbrev.)
In order to reduce space you can use this abbreviation for this instruction:

ALLOW ↔ Alw

Any problem?

If you have found a problem with this keyword, if you think there is a bug or, more simply, you would like it to be improved, open an issue for this example on GitHub.
Thank you!

open an issue BACK TO KEYWORDS