Multithreading Prolog-线程连接问题

Multithreading Prolog-线程连接问题,multithreading,prolog,Multithreading,Prolog,Prolog中的线程不共享堆栈中的数据(文档中这样说)。 然而,据我所知,这可以通过使用thread_join连接线程来解决。 如果到目前为止我说的任何话都是错的,请纠正我。 然而,如果一切都是真的,你能告诉我为什么下面的代码没有输出我期望的结果吗 maximum(X,Y,Y) :- X =< Y,!. maximum(X,_,X). start :- thread_create(maximum(5,6,X),Id1,[]), thread_create(maximum

Prolog中的线程不共享堆栈中的数据(文档中这样说)。 然而,据我所知,这可以通过使用thread_join连接线程来解决。 如果到目前为止我说的任何话都是错的,请纠正我。 然而,如果一切都是真的,你能告诉我为什么下面的代码没有输出我期望的结果吗

maximum(X,Y,Y) :- X =< Y,!.
maximum(X,_,X).

start :- thread_create(maximum(5,6,X),Id1,[]),
         thread_create(maximum(8,7,Y),Id2,[]),
         thread_create(maximum(9,9,Z),Id3,[]),
         thread_join(Id1,_),
         thread_join(Id2,_),
         thread_join(Id3,_),
         writeln(X),
         writeln(Y),
         writeln(Z).
最大值(X,Y,Y):-X=

另外,我希望它输出的是6、8和9(在单独的行中)。

假设这是SWI Prolog

thread\u create
在新线程中创建目标项的新副本,因此目标中变量的任何统一都不会反映回主线程

您可以使用
thread\u exit
谓词,将一个术语返回到
thread\u join
,包装在
exited(..)
中。例如:

thread(A,B) :- maximum(A,B,C),thread_exit(C).

maximum(X,Y,Y) :- X =< Y,!.
maximum(X,_,X).

start :- thread_create(thread(5,6),Id1,[]),
         thread_create(thread(8,7),Id2,[]),
         thread_create(thread(9,9),Id3,[]),
         thread_join(Id1,exited(X)),
         thread_join(Id2,exited(Y)),
         thread_join(Id3,exited(Z)),
         writeln(X),
         writeln(Y),
         writeln(Z).
线程(A,B):-最大值(A,B,C),线程退出(C)。
最大值(X,Y,Y):-X=
它工作得非常好。非常感谢您的解释和代码。