On 2011-03-19 14:14:51 -0400, Michel Fortin <michel.for...@michelf.com> said:

I'm not too convinced about the "I know what I'm doing" argument when I look at this example from asyncBuf's documentation:

    auto lines = File("foo.txt").byLine();
auto duped = map!"a.idup"(lines); // Necessary b/c byLine() recycles buffer

    // Fetch more lines in the background while we process the lines already
    // read into memory into a matrix of doubles.
    double[][] matrix;
    auto asyncReader = taskPool.asyncBuf(duped);

    foreach(line; asyncReader) {
        auto ls = line.split("\t");
        matrix ~= to!(double[])(ls);
    }

Look at the last line of the foreach. You are appending to a non-shared array from many different threads. How is that not a race condition?

... or maybe I just totally misunderstood asyncBuf. Rereading the documentation I'm under the impression I'd have to write this to get what I expected:

        foreach (line; parallel(asyncReader))
                ...

And that would cause a race condition. If that's the case, the example is fine. Sorry for the misunderstanding.

--
Michel Fortin
michel.for...@michelf.com
http://michelf.com/

Reply via email to