我想在Prolog中创建可变数量的线程,并使主线程等待所有线程。
我试图对谓词中的每个谓词进行联接,但似乎他们在按顺序等待另一个。 我也尝试过将线程的ID存储在一个列表中,然后加入每个ID,但仍然无法正常工作。 在代码示例中,我还尝试了在递归调用中的thread_join中传递S参数。
thr1(0):-!.
thr1(N):-
thread_create(someFunction(N),Id, []),
thread_join(Id, S),
N1 is N-1,
thr1(N1).
我希望N个谓词在执行某些打印时会与结果重叠,但是它们以顺序运行。
答案 0 :(得分:0)
对您的someFunction/1
谓词的调用最有可能比创建下一个线程所需的时间更快,这是一个相对繁重的过程,因为SWI-Prolog线程已映射到POSIX线程。因此,要实际获得重叠的结果,线程目标的计算时间必须超过线程创建时间。有关实现此目的的玩具示例,请参见:
https://github.com/LogtalkDotOrg/logtalk3/tree/master/examples/threads/sync