I'm wondering what the best approach is to signal a thread to exit. Just allocate a boolean variable for each thread and pass the address to
Soren Dreijer wrote: the thread starting function. The loop of the thread breaks if the flag is reset; the thread exits. This scheme is so simple that it doesn't even require synchronization beyond making the pointer the thread accesses volatile. You could use a shared_ptr to manage the memory, but personally I would simply use a scoped_ptr in the thread's main function. The following code is conceptual. I can't remember the exact API of Boost.Threads. void thread_proc(volatile bool *flag) { scoped_ptr<bool> guard(flag); while(*flag) { // Work } } map<threadid, bool *> flags; void create_worker() { auto_ptr<bool> flag_guard(new bool(true)); thread t(bind(&thread_proc, flag_guard.get())); // Thread is started. This ensures that it will release the memory. bool *b = flag_guard.release(); flags.insert(make_pair(t.get_id(), b)); } // Note: this function needs to synchronize if you can't ensure that it will only be ever called once // for any given thread id. void signal_worker(threadid id) { flag_iterator i = flags.find(id); if(i != flags.end()) { bool *b = i->second; flags.remove(id); *b = false; } } You will need to synchronize map access, of course. Sebastian Redl