#include #include #include void loop() { while(true) sleep(1); } template void cancel(T & thread) { sleep(1); // just in case pthread_cancel(thread.native_handle()); // low-level interuption } template void join(T & thread) { pthread_join(thread.native_handle(), nullptr); } int main() { std::thread std_thread1(loop); cancel(std_thread1); join(std_thread1); std::cout << "std::thread pthread_joined" << std::endl; std::thread std_thread2(loop); cancel(std_thread2); std_thread1.join(); std::cout << "std::thread joined" << std::endl; boost::thread boost_thread1(loop); cancel(boost_thread1); join(boost_thread1); std::cout << "boost::thread pthread_joined" << std::endl; boost::thread boost_thread2(loop); cancel(boost_thread2); std::cout << "waiting for boost::thread to join() forever... :(" << std::endl; boost_thread2.join(); std::cout << "so we never reach this point" << std::endl; return 0; }