Skip to content

Latest commit

 

History

History
99 lines (74 loc) · 3.24 KB

threaded_exit_1_2.rst

File metadata and controls

99 lines (74 loc) · 3.24 KB
.. rst-class:: align-right

built-in predicate

.. index:: pair: threaded_exit/1-2; Built-in predicate

threaded_exit/1-2

Description

threaded_exit(Goal)
threaded_exit(Goal, Tag)

Retrieves the result of proving Goal in a new thread. This predicate blocks execution until the reply is sent to the :term:`this` message queue by the thread executing the goal. When there is no thread proving the goal, the predicate generates an exception. This predicate is non-deterministic, providing access to any alternative solutions of its argument.

The argument of this predicate should be a variant of the argument of the corresponding :ref:`threaded_call/1 <predicates_threaded_call_1_2>` or :ref:`threaded_once/1 <predicates_threaded_once_1_2>` call. When the predicate argument is subsumed by the threaded_call/1 or threaded_once/1 call argument, the threaded_exit/1 call will succeed iff its argument is a solution of the (more general) goal.

The threaded_exit/2 variant accepts a threaded call identifier tag generated by the calls to the :ref:`threaded_call/2 <predicates_threaded_call_1_2>` and :ref:`threaded_once/2 <predicates_threaded_once_1_2>` predicates. Tags shall be regarded as an opaque term; users shall not rely on its type.

Note

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

Modes and number of proofs

threaded_exit(+callable) - zero_or_more
threaded_exit(+callable, +nonvar) - zero_or_more

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 retrieve an asynchronous goal proof result:
threaded_exit(Goal)
To retrieve an asynchronous message to self result:
threaded_exit(::Goal)
To retrieve an asynchronous message result:
threaded_exit(Object::Goal)
.. seealso::

   :ref:`predicates_threaded_call_1_2`,
   :ref:`predicates_threaded_ignore_1`,
   :ref:`predicates_threaded_once_1_2`,
   :ref:`predicates_threaded_peek_1_2`,
   :ref:`predicates_threaded_cancel_1`,
   :ref:`predicates_threaded_1`