
Hello Neil, Tuesday, April 7, 2009, 6:13:29 PM, you wrote:
Consider a thread pool with 2 threads and the call parallel_ [parallel_ [b,c],a]
You get the sequence: enqueue (parallel_ [b,c]) a wait on parallel_ [b,c]
While you are executing a, a thread pool starts: enqueue b c wait for b
Now you have all the threads waiting, and no one dealing with the thread pool. This results in deadlock.
i think the only way to solve this problem is to create one more thread each time. let's see: on every call to para you need to alloc one thread to wait for jobs completion. so on each nested call to para you have minus one worker thread. finally you will eat them all! so you need to make fork: one thread should serve jobs and another one wait for completion of this jobs bucket. and with killItself flag you will finish superfluous thread JIT -- Best regards, Bulat mailto:Bulat.Ziganshin@gmail.com