【发布时间】:2014-11-11 03:19:39
【问题描述】:
如果我有一个像下面这样的程序,prolog 是否会尝试同时证明maximum/3 所有三个时间?即每个线程都有自己的核心(假设在计算机上可用)?
我的实际程序需要大约 2 小时来在 maximum/3 的位置运行一个谓词,我需要计算 70 个等价的 pair/2。这种方法行得通吗?如果不是为什么不呢?我已将程序设置为运行,但从输出看来,它一次只执行一个线程。
maximum(X,Y,Y) :- X =< Y,!.
maximum(X,_,X).
pair(5,6).
pair(8,7).
pair(9,9).
thread(A,B,Stream) :-
maximum(A,B,C),
format(Stream, "max('~w','~w',~w).~n",[A,B,C]),
thread_exit(C).
start(File) :-
open(File,append,Stream,[]),
forall(
pair(A,B),
(
thread_create(thread(A,B,Stream),Id,[]),
thread_join(Id,exited(X)),
writeln(X)
)
),
close(Stream).
【问题讨论】:
标签: multithreading prolog swi-prolog