
On 07/26/2010 05:38 PM, Internet Retard wrote:
Perhaps something like this then:
while ( !jobs.empty() ) { if ( thread_count < cores ) { boost::thread t(boost::bind(&worker, jobs.front())); jobs.pop(); t.join(); } }
this approach is incorrect, look what can happen if for example the jobs container has last job to do: thread A performs the check jobs.empty() and it pass, before the thread A executes the job.front() another thread B does the check jobs.empty() and it pass as well, then thread A does the jobs.front() and then when thread B does a jobs.front() as well. that's why I suggested to do: while( job = jobs.front() ) { work on job } then jobs.front() will have to return a null pointer, throw an exception, whatever. And as suggested by others, instead to use this list as reference to learn the multi-threading programming, buy a good book about concurrency programming. Believe me, multi threading is very subtle. Regards Gaetano Mendola