I have a new 2 core CPU and I've been experimenting with boost::threads by attempting to keep both cores busy independent of each other. Say I have a queue of 4 tasks to do. Each task will be handled by one thread. Some tasks will take longer to complete than others so I can't use thread_group with 2 threads at a time and join_all() as one core may finish before the other and set idle until the second thread completes. I use boost::thread::hardware_concurrency() to determine how many CPU cores I have available. My problem is *knowing* when a thread/CPU core finishes a task and is available for another task. Here is some sample code. I commented what I think would be an approach. Any suggestions or hints? std::queuestd::string string_queue() { std::queuestd::string sq; sq.push("AAA"); sq.push("BBB"); sq.push("CCC"); sq.push("DDD"); return sq; } void worker(std::string& S) { std::cout << S << std::endl; } int main() { std::cout << "Number of Cores: " << boost::thread::hardware_concurrency() << std::endl; std::queuestd::string strings = string_queue(); while ( !strings.empty() ) { // if ( a CPU core is available ) // { boost::thread t(boost::bind(&worker, strings.front())); t.join(); strings.pop(); // } // else // { // wait awhile and check if a CPU core is available again. // } } return 0; } _________________________________________________________________ Hotmail: Trusted email with Microsoft’s powerful SPAM protection. https://signup.live.com/signup.aspx?id=60969