История изменений
Исправление Softwayer, (текущая версия) :
https://en.cppreference.com/w/cpp/thread/stop_token
https://en.cppreference.com/w/cpp/thread/jthread
С «внезапно» действительно не очень вяжется, но если хочется graceful shutdown, то оно.
С системными API оно, правда, дружит никак (да и внутри стандартной библиотеки единственный вид ожидания, который так прерывается — condition_variable_any::wait), какие-то попытки скрестить ежа с ужом существуют, но не знаю насколько оно production ready.
Альтернатива — pthread_cancel
, в принципе это рабочий подход, если реализация pthread раскручивает стек (в musl вроде не так) и код готов к тому, что из довольно неожиданных могут вылетать исключения, которые нельзя не пробросить дальше (в частности, если зовёшь что-то содержащее cancellation point в noexcept
функции — например, делаешь close()
в деструкторе — ты проиграл).
Исходная версия Softwayer, :
https://en.cppreference.com/w/cpp/thread/stop_token
https://en.cppreference.com/w/cpp/thread/jthread
С «внезапно» действительно не очень вяжется, но если хочется graceful shutdown, то оно.
С системными API оно, правда, дружит никак (да и внутри стандартной библиотеки единственный вид ожидания, который так прерывается — condition_variable_any::wait), какие-то попытки скрестить ежа с ужом существуют, но не знаю насколько оно production ready.