I may be speaking out of turn as I haven't looked at the template class parallel_while or seen anything but what appears in the tutorial to a point. However, what I've seen suggests that usability of parallel_while is not ideal. I'm going to suggest an alternative which may not be possible, but if not, it may be of some value in considering improvements.
As illustrated in the tutorial, one must create a parallel_while instance, a Stream, and a Body of type T. The Body may call parallel_while::add() to add new items to the set, if constructed appropriately. To activate the loop, one calls parallel_while::run() with the Stream and Body.
That would be easier to manage if parallel_while were a function template that looks like this:
parallel_while(Stream & _stream, Body & _body)
typename parallel_while_manager manager;
Template metaprogramming should be able to determine whether Body defines set_manager() and can dispatch to a helper function that calls it or not accordingly. Thus, if the Body wants to be able to augment the loop, it can define set_manager() and then call add() on that object as appropriate. If not, the Body can omit the function and it won't be called.
This approach ensures that the objects are assembled correctly and makes parallel_while a function template like parallel_for() and parallel_reduce(). Have I missed anything that makes this untenable?