10.20 Process Communication—library(linda/[server,client])

Linda is a concept for process communication.

For an introduction and a deeper description, see [Carreiro & Gelernter 89a] or [Carreiro & Gelernter 89b], respectively.

One process is running as a server and one or more processes are running as clients. The processes are communicating with sockets and supports networks.

The server is in principle a blackboard on which the clients can write (out/1), read (rd/1) and remove (in/1) data. If the data is not present on the blackboard, the predicates suspend the process until they are available.

There are some more predicates besides the basic out/1, rd/1 and in/1. The in_noblock/1 and rd_noblock/1 does not suspend if the data is not available—they fail instead. A blocking fetch of a conjunction of data can be done with in/2 or rd/2.

Example: A simple producer-consumer. In client 1:

producer :-
       produce(X),
       out(p(X)),
       producer.

produce(X) :- …..

In client 2:

consumer :- 
       in(p(A)),
       consume(A),
       consumer.

consume(A) :- …..

Example: Synchronization

       …,
       in(ready),  %Waits here until someone does out(ready)
       …,

Example: A critical region

       …,
       in(region_free),  % wait for region to be free
       critical_part,
       out(region_free), % let next one in
       …,

Example: Reading global data

       …,
       rd(data(Data)),
       …,

or, without blocking:
       …,
       rd_noblock(data(Data)) ->
             do_something(Data)
       ;     write('Data not available!'),nl
       ),
       …,

Example: Waiting for one of several events

       …,
       in([e(1),e(2),…,e(n)], E),
%  Here is E instantiated to the first tuple that became available
       …,


Send feedback on this subject.