The clients are one or more SICStus processes that have connection(s) to the server.
To load the package, enter the query
| ?- use_module(library('linda/client')).
Some of the following predicates fail if they don't receive an
answer from the Linda-server in a reasonable amount of time. That time
is set with the predicate linda_timeout/2
.
linda_client(
+Address)
Establishes a connection to a Linda-server specified by Address.
The Address is of the format Host:PortNumber as given by
linda/[0,1]
.
It is not possible to be connected to two Linda-servers at the same time.
This predicate can fail due to a timeout.
close_client
Closes the connection to the server.
shutdown_server/0
Sends a Quit signal to the server, which keeps
running after receiving this signal, until such time as all
the clients have closed their connections. It is up to the clients to
tell each other to quit. When all the clients are done, the server stops
(i.e. linda/[0,1]
succeeds). Courtesy of Malcolm Ryan.
Note that close_client/0
should be called after
shutdown_server/0
. shutdown_server/0
will raise an error
if there is no connection between the client and the server.
linda_timeout(
?OldTime,
?NewTime)
This predicate controls Linda's timeout. OldTime is
unified with the old timeout and then timeout is set to
NewTime. The value is either off
or of the form
Seconds:Milliseconds. The former value indicates that the timeout
mechanism is disabled, that is, eternal waiting. The latter form is the
timeout-time.
out(
+Tuple)
Places the tuple Tuple in Linda's tuple-space.
in(
?Tuple)
Removes the tuple Tuple from Linda's tuple-space if it is there.
If not, the predicate blocks until it is available (that is,
someone performs an out/1
).
in_noblock(
?Tuple)
Removes the tuple Tuple from Linda's tuple-space if it is there. If not, the predicate fails.
This predicate can fail due to a timeout.
in(
+TupleList,
?Tuple)
As in/1
but succeeds when either of the tuples in TupleList
is available. Tuple is unified with the fetched tuple. If
that unification fails, the tuple is not reinserted in the
tuple-space.
rd(
?Tuple)
Succeeds if Tuple is available in the tuple-space, suspends otherwise
until it is available.
Compare this with in/1
: the tuple is not removed.
rd_noblock(
?Tuple)
Succeeds if Tuple is available in the tuple-space, fails otherwise.
This predicate can fail due to a timeout.
rd(
+TupleList,
?Tuple)
in/2
but does not remove any tuples.
bagof_rd_noblock(
?Template,
+Tuple,
?Bag)
Bag is the list of all instances of Template such that Tuple exists in the tuple-space.
The behavior of variables in Tuple and Template is as
in bagof/3
. The variables could be existentially
quantified with ^/2
as in bagof/3
.
The operation is performed as an atomic operation.
This predicate can fail due to a timeout.
Example: Assume that only one client is connected to the server and that the tuple-space initially is empty.
| ?- out(x(a,3)), out(x(a,4)), out(x(b,3)), out(x(c,3)). | ?- bagof_rd_noblock(C-N, x(C,N), L). C = _32, L = [a-3,a-4,b-3,c-3], N = _52 | ?- bagof_rd_noblock(C, N^x(C,N), L). C = _32, L = [a,a,b,c], N = _48