Использование pthread_cancel() может быть нежелательным по нескольким причинам:
Вместо использования pthread_cancel() рекомендуется, когда это возможно, иметь общий флаг, который используется потоками для выхода из цикла. 2 Так можно позволить потокам выполнить любую очистку, которая им может потребоваться, перед фактическим завершением. 2
Также при использовании pthread_cancel() в языке C++ есть риск падения программы, если не поймать исключение в определённой точке (cancellation point). 5