synchronized(Name/Arity) synchronized((Name/Arity, ...)) synchronized([Name/Arity, ...]) synchronized(Name//Arity) synchronized((Name//Arity, ...)) synchronized([Name//Arity, ...])
Declares synchronized predicates and synchronized grammar rule non-terminals. A synchronized predicate (or synchronized non-terminal) is protected by a mutex in order to allow for thread synchronization when proving a call to the predicate (or non-terminal). All predicates (and non-terminals) declared in the same synchronized directive share the same mutex. In order to use a separate mutex for each predicate (non-terminal) so that they are independently synchronized, a per-predicate synchronized directive must be used.
Declaring a predicate synchronized implicitly makes it deterministic.
When using a single-threaded backend Prolog compiler, calls to
synchronized predicates behave as wrapped by the standard
Note that synchronized predicates cannot be declared dynamic (when necessary, declare the predicates updating the dynamic predicates as synchronized).
Template and modes¶