SWI-Prolog multithreading is based on standard C language
multithreading support. It is not like ParLog or other parallel
implementations of the Prolog language. Prolog threads have their own
stacks and only share the Prolog heap: predicates, records,
flags and other global non-backtrackable data. SWI-Prolog thread support
is designed with the following goals in mind.

Interactive applications
Interactive applications often need to perform extensive computation. If
such computations are executed in a new thread, the main thread can
process events and allow the user to cancel the ongoing computation.
User interfaces can also use multiple threads, each thread dealing with
input from a distinct group of windows. See also section
9.7.

Natural integration with foreign code
Each Prolog thread runs in a native thread of the operating system,
automatically making them cooperate with MT-safe foreign code.
In addition, any foreign thread can create its own Prolog engine for
dealing with calling Prolog from C code.

SWI-Prolog multithreading is based on the POSIX thread standard
Butenhof,
1997 used on most popular systems except for MS-Windows. On
Windows it uses the
pthread-win32
emulation of POSIX threads mixed with the Windows native API for
smoother and faster operation. The SWI-Prolog thread implementation has
been discussed in the ISO WG17 working group and is largely addopted by
YAP and XSB Prolog.159The latest
version of the ISO draft can be found at http://logtalk.org/plstd/threads.pdf.
It appears to have dropped from the ISO WG17 agenda.