Difference between revisions of "Multi-threading: A brief introduction"
From wiki.visual-prolog.com
(category) |
|||
Line 44: | Line 44: | ||
[[Thread safety in Visual Prolog]] | [[Thread safety in Visual Prolog]] | ||
[[category:Multi-threading]] | [[category:Multi-threading]] |
Latest revision as of 11:03, 4 March 2016
Multi-threading is only possible in the Commercial Edition.
Threads are represented by the thread class/interface. And it is very simple to create a new thread:
clauses ... T = thread::start(myThread), % start a new thread which executes the predicate myThread ... predicates myThread : (). clauses myThread() :- ...
Using anonymous predicates it is also very simple to transfer data to the new thread:
clauses ... SomeData = ..., T = thread::start( { :- myThreadWithData(SomeData) }), ... predicates myThreadWithData : (complexData ThreadInputData). clauses myThreadWithData(ThreadInputData) :- ...
You can wait for thread termination, because a thread object is a synchronization object:
clauses ... SomeData = ..., T = thread::start( { :- myThreadWithData(SomeData) } ), ... % stuff done in parallel with T T:wait(), % Wait for T to terminate ...
Thread safe acces to shared data can be done using monitors and/or synchronization objects like criticalSection, event, mutex and semaphore.