[Next] [Up] [Previous]

Interprocess Communications

There is, in YAL, a special kind of subroutine, called a SERVER, which is used to allow communications between parallel tasks to be more elaborate than possible by the use of CONTROLLED variables or the LINK statement.

A program (often, the main program) calls a SERVER by a statement of the form

       ACTIVATE name(...)

which calls the SERVER program with the header statement

       SERVER name(...)

which then proceeds, possibly in parallel with the calling program, like a normal subroutine called with an INITIATE statement, until it executes a statement of the form

       SERVE

which causes two things two happen: the SERVER program suspends its execution, and it becomes possible for other programs to call entry points of the SERVER program which were declared by statements of the form

       SERVICE name(...) & linenumber

with a statement of the form

       REQUEST name(...)

Unlike a regular subroutine, however, when multiple parallel processes call a SERVER, they do not cause new copies of it to be made, nor do such calls execute in parallel. Instead, a routine requesting a service must wait until no other part of the same server is executing.

In addition, some SERVICEs may be declared temporarily unavailable by the statement

       USELESS name,name,...name

which simply causes processes requesting the named services to wait until they are made available again by

       USEFUL name,name,...name

These two statements may be found anywhere in a SERVER, although a SERVICE cannot declare itself USEFUL. If a SERVICE declares itself USELESS, it still continues executing in response to the request it was serving, but it becomes unavailable after it finishes (with a normal STOP or RETURN statement).

A SERVICE can also cause the main line of its SERVER to resume, by fall-through out of a SERVE statement, by executing the statement

       ADVANCE

This takes place after return from the SERVICE. Multiple ADVANCE statements executed within one SERVICE have the effect of a single ADVANCE statement; to indicate a special request of the SERVER, a SERVICE must set a variable used by both (as they are entry points of the same routine, EXTERNAL and AVAILABLE statements are not used here).

Also, the main program that ACTIVATEd a SERVER can turn it off abruptly by executing a statement of the form

       DENY name

where name is the name of the SERVER.


[Next] [Up] [Previous]