On Saturday, 11 February 2012 at 01:31:29 UTC, Ali Çehreli wrote:
Sorry for the double-post; I have asked the same question on D.learn earlier but I think this is more of a question to this forum.

Tested on Ubuntu 11.10 64-bit dmd.

The following program gets stuck during the writeln() call.

- Note that the foo() call alone works fine.

- Also note that the program works fine when there is no writeln() call nor foo() call. All elements get processed in that case and the results are ignored.

Am I using taskPool.map incorrectly or is this a bug? Can you help identify where the problem may be? How is writeln() using the range differently than foo() to cause this behavior?

import std.stdio;
import std.parallelism;
import core.thread;

int func(int i)
{
   writeln("processing ", i);
   return i;
}

void main()
{
   auto results = taskPool.map!func([1,2,3,4,5,6,7,8], 2);

   writeln(results);  // <-- Gets stuck HERE

   foo(results); // this works fine
}

void foo(R)(R range)
{
   for ( ; !range.empty; range.popFront()) {
       writeln(range.front);
   }
}

Thank you,
Ali

For what I see, maybe that's because it's a "non-random access ranges". So to access "results", you need access from it's aggregate...

try this inside your main:


  foreach(int r; results)
      writeln(r);

//   foo(results); // this works fin



Reply via email to