std::stop_callback<Callback>::~stop_callback
~stop_callback(); | (начиная с C++20) |
Уничтожает объект stop_callback.
Если *this имеет stop_token с соответствующим состоянием остановки, снимает с него регистрацию обратного вызова.
Если функция обратного вызова вызывается одновременно в другом потоке, деструктор не завершит работу, пока не завершится вызов функции обратного вызова. Если функция обратного вызова вызывается в том же потоке, в котором вызывается деструктор, деструктор возвращает управление, не дожидаясь завершения вызова обратного вызова (см. примечания).
Примечания
Деструктор stop_callback предназначен для предотвращения гонок данных и взаимных блокировок. Если другой поток в данный момент вызывает обратный вызов, деструктор не может завершить работу, пока этот вызов не завершится, иначе объект функции может быть уничтожен во время выполнения. Функция обратного вызова не обязана быть ни копируемой, ни перемещаемой — она находится непосредственно в объекте stop_callback даже после регистрации.
С другой стороны, если поток, вызывающий деструктор, совпадает с потоком, вызывающим обратный вызов, деструктор не может ждать, иначе возникнет взаимная блокировка. Один и тот же поток может и имеет право уничтожать stop_callback во время вызова его функции обратного вызова, поскольку сама функция обратного вызова может прямо или косвенно уничтожить stop_callback.
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/thread/stop_callback/~stop_callback