Simplest multithreading example
Brian via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Aug 31 18:59:07 PDT 2017
Hello, I am trying to get the most trivial example of
multithreading working, but can't seem to figure it out.
I want to split a task across threads, and wait for all those
tasks to finish before moving to the next line of code.
The following 2 attempts have failed :
-----------------------------------------------------
Trial 1 :
-----------------------------------------------------
auto I = std.range.iota(0,500);
int [] X; // output
foreach (i; parallel(I) )
X ~= i;
core.thread.thread_joinAll(); // Apparently no applicable here ?
writeln(X); // some random subset of indices
------------------------------------------------
Trial 2 : (closer to Java)
------------------------------------------------
class DerivedThread : Thread
{
int [] X;
int i;
this(int [] X, int i){
this.X = X;
this.i = i;
super(&run);
}
private:
void run(){
X ~= i;
}
}
void main(){
auto I = std.range.iota(0,500);
int [] X; // output
Thread [] threads;
foreach (i; I )
threads ~= new DerivedThread( X,i);
foreach( thread; threads)
thread.start();
foreach( thread; threads)
thread.join(); // does not seem to do anything
core.thread.thread_joinAll(); // also not doing anything
writeln(X); // X contains nothing at all
}
How can I get the program to wait until all threads have finished
before moving to the next line of code ?
Thank you !
More information about the Digitalmars-d-learn
mailing list