Namespaces
Variants

std::stop_callback<Callback>:: ~stop_callback

From ru.cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
~stop_callback ( ) ;
(начиная с C++20)

Уничтожает объект stop_callback .

Если * this имеет stop_token с ассоциированным состоянием остановки, отменяет регистрацию колбэка из него.

Если функция обратного вызова выполняется параллельно в другом потоке, деструктор не завершается до тех пор, пока не завершится выполнение функции обратного вызова. Если функция обратного вызова выполняется в том же потоке, в котором вызывается деструктор, то деструктор возвращает управление без ожидания завершения выполнения функции обратного вызова (см. Примечания).

Примечания

Деструктор stop_callback разработан для предотвращения состояний гонки и взаимных блокировок. Если другой поток в данный момент вызывает обратный вызов, то деструктор не может завершиться до окончания этого вызова, иначе объект функции может быть уничтожен во время его выполнения. Функция обратного вызова не обязана быть ни копируемой, ни перемещаемой - она существует в самом объекте stop_callback даже после регистрации.

С другой стороны, если текущий поток, вызывающий деструктор, является тем же потоком, который вызывает callback, то деструктор не может ожидать, иначе произойдет взаимоблокировка. Допустимо и корректно, когда тот же поток уничтожает stop_callback во время вызова его callback-функции, поскольку сама callback-функция может напрямую или косвенно уничтожить stop_callback .