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 !

Reply via email to