Simen kjaeraas <simen.kja...@gmail.com> wrote:
How does the current range system accommodate parallel iteration?
As far as I can see, a context switch could happen between calls to
popFront and front, thus popping a value off the range before we're
able to get its value.
Anyone? It seems to me the system is not thread-safe, and a parallel
range should have the functions lock() and unlock(), so a foreach
would work basically like this:
foreach( e; r ) {
stuff(e);
}
=>
while(true) {
r.lock();
if (r.empty) {
unlock();
break;
}
auto e = r.front;
r.popFront();
r.unlock();
stuff(e);
}
Note that this approach does not in any way protect access to the
elements, only the range functions.
--
Simen