命名空间
变体
操作

std::stop_callback<Callback>::~stop_callback

来自 cppreference.cn
 
 
并发支持库
线程
(C++11)
(C++20)
this_thread 命名空间
(C++11)
(C++11)
(C++11)
协同取消
互斥
(C++11)
通用锁管理
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
条件变量
(C++11)
信号量
闩锁和栅栏
(C++20)
(C++20)
期物
(C++11)
(C++11)
(C++11)
(C++11)
安全回收
(C++26)
Hazard 指针
原子类型
(C++11)
(C++20)
原子类型的初始化
(C++11)(C++20 中已弃用)
(C++11)(C++20 中已弃用)
内存排序
(C++11)(C++26 中已弃用)
原子操作的自由函数
原子标志的自由函数
 
std::stop_callback
成员函数
stop_callback::~stop_callback
推导指引
 
~stop_callback();
(自 C++20 起)

销毁 stop_callback 对象。

如果 *this 拥有带有关联停止状态的 stop_token,则从中注销回调。

如果回调函数正在另一个线程上并发调用,则析构函数不会完成,直到回调函数调用完成。如果回调函数正在与调用析构函数的同一线程上调用,则析构函数将返回,而无需等待回调调用完成(参见“注释”)。

[编辑] 注释

stop_callback 析构函数旨在防止竞争条件和死锁。如果另一个线程当前正在调用回调,则析构函数无法返回,直到该调用完成,否则函数对象可能会在执行时被销毁。回调函数不需要可复制或可移动 - 它即使在注册后也存在于 stop_callback 对象本身中。

另一方面,如果调用析构函数的当前线程与正在调用回调的线程是同一线程,则析构函数不能等待,否则会发生死锁。同一个线程在调用其回调函数的同时销毁 stop_callback 是可能且有效的,因为回调函数本身可能会直接或间接地销毁 stop_callback