Difference between revisions of "Multi-threading: A brief introduction(多线程简介)"
From wiki.visual-prolog.com
(2 intermediate revisions by the same user not shown) | |||
Line 3: | Line 3: | ||
只有 ''商业版'' 才支持多线程应用。 | 只有 ''商业版'' 才支持多线程应用。 | ||
线程是由 <vp>thread</vp> 类/接口表示的。创建一个新线程很简单: | |||
<vip>clauses | <vip>clauses | ||
... | ... | ||
T = thread::start(myThread), % | T = thread::start(myThread), % 启动一个新线程,这个线程执行谓词 myThread | ||
... | ... | ||
Line 16: | Line 16: | ||
...</vip> | ...</vip> | ||
使用匿名谓词向新线程传递数据也很简单: | |||
<vip>clauses | <vip>clauses | ||
Line 30: | Line 30: | ||
...</vip> | ...</vip> | ||
可以等待线程结束,因为线程对象是同步对象: | |||
<vip>clauses | <vip>clauses | ||
Line 36: | Line 36: | ||
SomeData = ..., | SomeData = ..., | ||
T = thread::start( { :- myThreadWithData(SomeData) } ), | T = thread::start( { :- myThreadWithData(SomeData) } ), | ||
... % | ... % 与T并行着做某些工作 | ||
T:wait(), % | T:wait(), % 等待T结束 | ||
...</vip> | ...</vip> | ||
要使线程安全访问共享的数据,可以使用 [[Language Reference/Monitors|monitors]] 和/或同步对象如: <vp>criticalSection</vp>、 <vp>event</vp>、<vp>mutex</vp> 及 <vp>semaphore</vp>。 | |||
=== 参考 === | === 参考 === |
Latest revision as of 02:29, 22 June 2015
(以下内容译自Category:Tutorials中的Multi-threading: A brief introduction。)
只有 商业版 才支持多线程应用。
线程是由 thread 类/接口表示的。创建一个新线程很简单:
clauses ... T = thread::start(myThread), % 启动一个新线程,这个线程执行谓词 myThread ... predicates myThread : (). clauses myThread() :- ...
使用匿名谓词向新线程传递数据也很简单:
clauses ... SomeData = ..., T = thread::start( { :- myThreadWithData(SomeData) }), ... predicates myThreadWithData : (complexData ThreadInputData). clauses myThreadWithData(ThreadInputData) :- ...
可以等待线程结束,因为线程对象是同步对象:
clauses ... SomeData = ..., T = thread::start( { :- myThreadWithData(SomeData) } ), ... % 与T并行着做某些工作 T:wait(), % 等待T结束 ...
要使线程安全访问共享的数据,可以使用 monitors 和/或同步对象如: criticalSection、 event、mutex 及 semaphore。