作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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).
附言我希望它输出的是 6,8 和 9(在不同的行上)。
最佳答案
假设这是 SWI-Prolog。
thread_create
在新线程中创建目标项的新副本,因此目标中变量的任何统一都不会反射(reflect)回主线程。
您可以使用 thread_exit
谓词将术语返回到 thread_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).
关于multithreading - Prolog - thread_join 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6083965/
Prolog 中的线程不共享其堆栈中的数据(在文档中如此说明)。但是,据我所知,这可以通过使用 thread_join 加入线程来解决。如果我到目前为止所说的任何内容都是错误的,请纠正我。但是,如果一
我是一名优秀的程序员,十分优秀!