Комментарии 2
Из за того что в C++ до сих пор нет cancelable threads, приходится использовать обёртки над pthread. С threads в C++ целая куча проблем. Например невозможность корректно завершить програму если один из потоков ожидает ввода-вывода или семафора, ну или ожидает выполнения любой из функций являющихся cancellation point. В принципе это не проблема, но хотелось-бы подобные вещи иметь из коробки.
Но в любом случае, установка хэндлера корректной очистки при cancellation, с помощью pthread_cleanup_push и pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, ...) и pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, ...) в обёртке, всё равно лучше чем опрос is_interrupted по каждому чиху (и об этом опросе можно ведь забыть, т.е. и тут придётся обёртку делать).
Но в любом случае, установка хэндлера корректной очистки при cancellation, с помощью pthread_cleanup_push и pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, ...) и pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, ...) в обёртке, всё равно лучше чем опрос is_interrupted по каждому чиху (и об этом опросе можно ведь забыть, т.е. и тут придётся обёртку делать).
+3
Мда, Статья написана по r5, а приняли r10. Там сейчас все несколько по другому.
+2
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Новый поток в C++20: std::jthread