
Hi all, I would like to know how can I do the following: I have n working threads. Each one has a loop preceded by a wait condition (1). When the wait condition is unlocked, the thread takes a task on a queue, and process the task. I need to make something in the submit task function that wait until all processes are on the wait condition (1). How can I do that ? I tried a while(!_nWorking) {} but this is not clean. Here follows my threads function: void ProcessingThread::dispatcher( const int idx ) { using namespace boost; mutex::scoped_lock readyLocker( _dispatchMutex[idx] ); while( !_bDispStop ) { --_nWorking; // Wait for a task _condProcessIn[idx].wait( readyLocker ); ++_nWorking; while( !_bDispStop && !_pendingQueues[idx].empty() ) { _pendingQueuesMutex[idx].lock(); Task task = _pendingQueues[idx].front(); _pendingQueues[idx].pop_front(); _pendingQueuesMutex[idx].unlock(); // Process node assert( task._proc ); assert( task._procData ); task._proc->execute( task._range, *task._procData ); } } } Launched via: _nWorking = _nCpu; for( std::size_t i = 0; i < _nCpu; ++i ) { // Create dispatcher thread _dispThrdGroup.create_thread( boost::bind( &ProcessingThread::dispatcher, this, i ) ); } Submit task function: void ProcessingThread::submitProcess( ProcessLauncher * proc, const FrameRange & range, ProcessData & procData ) { // Get the index of the less used queue std::size_t idx = getLessUsedQueueIdx(); _pendingQueuesMutex[idx].lock(); // Append a task to the less used queue _pendingQueues[ idx ].push_back( Task( proc, range, procData ) ); // Signal that a task is ready _condProcessIn[idx].notify_one(); _pendingQueuesMutex[idx].unlock(); /// UGLY ! while( _nWorking ) { } } Thank you in advance, Eloi Du Bois.