/usr/lib/swipl/library/thread.pl
All Application Manual Name SummaryHelp

  • swipl
    • library
      • error.pl
      • debug.pl
      • apply.pl -- Apply predicates on a list
      • lists.pl
      • broadcast.pl
      • shlib.pl -- Utility library for loading foreign objects (DLLs, shared objects)
      • option.pl -- Option list processing
      • thread_pool.pl -- Resource bounded thread management
      • gensym.pl -- Generate unique symbols
      • settings.pl -- Setting management
      • arithmetic.pl -- Extensible arithmetic
      • main.pl -- Provide entry point for scripts
      • readutil.pl
      • operators.pl -- Manage operators
      • pairs.pl -- Operations on key-value lists
      • prolog_source.pl
      • record.pl -- Access compound arguments by name
      • quasi_quotations.pl -- Define Quasi Quotation syntax
      • sandbox.pl -- Sandboxed Prolog code
      • apply_macros.pl -- Goal expansion rules to avoid meta-calling
      • yall.pl -- Lambda expressions
      • assoc.pl
      • prolog_format.pl -- Analyse format specifications
      • pure_input.pl -- Pure Input from files and streams
      • solution_sequences.pl -- Modify solution sequences
      • ordsets.pl
      • random.pl -- Random numbers
      • base64.pl -- Base64 encoding and decoding
      • aggregate.pl -- Aggregation operators on backtrackable predicates
      • predicate_options.pl -- Access and analyse predicate options
      • csv.pl
      • pprint.pl -- Pretty Print Prolog terms
      • atom.pl -- Operations on atoms
      • modules.pl -- Module utility predicates
      • occurs.pl -- Finding and counting sub-terms
      • prolog_xref.pl -- Prolog cross-referencer data collection
      • prolog_colour.pl -- Prolog syntax colouring support.
      • lazy_lists.pl -- Lazy list handling
      • ugraphs.pl -- Graph manipulation library
      • url.pl
      • www_browser.pl -- Open a URL in the users browser
      • prolog_pack.pl -- A package manager for Prolog
      • git.pl -- Run GIT commands
      • utf8.pl -- UTF-8 encoding/decoding on lists of character codes.
      • quintus.pl -- Quintus compatibility
      • prolog_versions.pl -- Demand specific (Prolog) versions
      • prolog_wrap.pl -- Wrapping predicates
      • dialect.pl -- Support multiple Prolog dialects
      • date.pl -- Process dates and times
      • persistency.pl -- Provide persistent dynamic predicates
      • iostream.pl -- Utilities to deal with streams
      • prolog_code.pl -- Utilities for reasoning about code
      • strings.pl
      • dif.pl -- The dif/2 constraint
      • edinburgh.pl
      • terms.pl -- Term manipulation
      • ansi_term.pl -- Print decorated text to ANSI consoles
      • threadutil.pl -- Interactive thread utilities
      • prolog_stack.pl -- Examine the Prolog stack
      • prolog_clause.pl
      • prolog_breakpoints.pl
      • wfs.pl -- Well Founded Semantics interface
      • sort.pl
      • dicts.pl
      • varnumbers.pl
      • rbtrees.pl -- Red black trees
      • base32.pl -- Base32 encoding and decoding
      • charsio.pl -- I/O on Lists of Character Codes
      • codesio.pl -- I/O on Lists of Character Codes
      • coinduction.pl -- Co-Logic Programming
      • heaps.pl -- heaps/priority queues
      • statistics.pl
      • when.pl -- Conditional coroutining
      • backcomp.pl -- Backward compatibility
      • ctypes.pl -- Character code classification
      • listing.pl -- List programs and pretty print clauses
      • pio.pl
      • oset.pl
      • qsave.pl
      • zip.pl -- Access resource ZIP archives
      • prolog_deps.pl
      • optparse.pl -- command line parsing
      • prolog_jiti.pl -- Just In Time Indexing (JITI) utilities
      • check.pl -- Consistency checking
      • increval.pl -- Incremental dynamic predicate modification
      • tables.pl -- XSB interface to tables
      • tableutil.pl
      • prolog_debug.pl -- User level debugging tools
      • portray_text.pl -- Portray text
      • fastrw.pl
      • prolog_coverage.pl
      • nb_set.pl -- Non-backtrackable sets
      • check_installation.pl -- Check installation issues and features
      • macros.pl -- Macro expansion
      • thread.pl -- High level thread primitives
        • concurrent/3
        • concurrent_forall/2
        • concurrent_forall/3
        • concurrent_and/2
        • concurrent_and/3
        • concurrent_maplist/2
        • concurrent_maplist/3
        • concurrent_maplist/4
        • first_solution/3
        • call_in_thread/2
        • call_in_thread/3
      • help.pl
      • make.pl
      • writef.pl -- Old-style formatted write
      • edit.pl
      • prolog_profile.pl -- Execution profiler
      • shell.pl
      • system.pl
      • prolog_codewalk.pl -- Prolog code walker
      • streams.pl -- Manage Prolog streams
      • prolog_autoload.pl
      • prolog_metainference.pl
      • intercept.pl
      • exceptions.pl -- Exception classification
      • qpforeign.pl
      • vm.pl
      • rwlocks.pl -- Read/write locks
      • prolog_trace.pl -- Print access to predicates
      • nb_rbtrees.pl
      • tty.pl
      • readln.pl
      • prolog_history.pl
      • files.pl
      • prolog_config.pl
      • hashtable.pl -- Hash tables
      • explain.pl -- Describe Prolog Terms
      • tabling.pl
 concurrent_forall(:Generate, :Action) is semidet
 concurrent_forall(:Generate, :Action, +Options) is semidet
True when Action is true for all solutions of Generate. This has the same semantics as forall/2, but the Action goals are executed in multiple threads. Notable a failing Action or a Action throwing an exception signals the calling thread which in turn aborts all workers and fails or re-throws the generated error. Options:
threads(+Count)
Number of threads to use. The default is determined by the Prolog flag cpu_count.
To be done
- Ideally we would grow the set of workers dynamically, similar to dynamic scheduling of HTTP worker threads. This would avoid creating threads that are never used if Generate is too slow or does not provide enough answers and would further raise the number of threads if Action is I/O bound rather than CPU bound.