Spec-Zone.ru › C++

std::stop_callback<Callback>::~stop_callback

~stop_callback();
(since 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/w/cpp/thread/stop_callback/%7Estop_callback

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API