То есть, нужно придумать неких диспетчер потоков, который анализирует работоспособность (независшесть) каждой из нитей и в случае проблем с ней генерит для неё exception, "проталкивает" его внутрь нити, нить самостоятельно завершается, всё за собой подчищает и сообщает об этом диспетчеру. При этом основное приложение живёт нормальной жизнью.
Как-то уж больно заманчиво всё это выглядит, чтобы уже не быть реализованным в виде готового решения.
Что касается C++ 0x, то вот цитата от Страуструпа (там, вообще много интересного
http://sergeyteplyakov.blogspot.com/2012/05/c-11-faq.html):
Не существует возможности запросить поток завершить исполнение (например, потребовать его завершиться как можно быстрее и насколько возможно безопасно), или принудительно прервать его исполнение (т.е. убить его). Мы оставили следующие возможности для реализации такого поведения:
- Разработать собственный механизм кооперативный отмены исполнения (с помощью разделяемых данных, вызывающий поток может установить значение, которое будет прочитано вызываемым потоком для быстрого и безопасного завершения),
- С помощью «нативного подхода» (получив доступ к дескриптору операционной системы с помощью thread::native_handle()),
- Завершить процесс (с помощью std::quick_exit()),
- Завершить программу (с помощью std::terminate()).