built-in predicate

threaded_peek/1-2

Description

threaded_peek(Goal)
threaded_peek(Goal, Tag)

Checks if the result of proving Goal in a new thread is already available. This call succeeds or fails without blocking execution waiting for a reply to be available. When there is no thread proving the goal, the predicate generates an exception.

The argument of this predicate should be a variant of the argument of the corresponding threaded_call/1 or threaded_once/1 call. When the predicate argument is subsumed by the threaded_call/1 or threaded_once/1 call argument, the threaded_peek/1 call will succeed iff its argument unifies with an already available solution of the (more general) goal.

The threaded_peek/2 variant accepts a threaded call identifier tag generated by the calls to the threaded_call/2 and threaded_once/2 predicates. Tags shall be regarded as an opaque term; users shall not rely on their type.

Note

This predicate requires a backend Prolog compiler providing compatible multi-threading primitives. The value of the read-only threads flag is set to supported when that is the case.

Modes and number of proofs

threaded_peek(+callable) - zero_or_one
threaded_peek(+callable, +nonvar) - zero_or_one

Errors

Goal is a variable:
instantiation_error
Goal is neither a variable nor a callable term:
type_error(callable, Goal)
No thread is running for proving Goal in the Object calling context:
existence_error(thread, Object)
Tag is a variable:
instantiation_error

Examples

To check for an asynchronous goal proof result:
threaded_peek(Goal)
To check for an asynchronous message to self result:
threaded_peek(::Goal)
To check for an asynchronous message result:
threaded_peek(Object::Goal)