命名空间
变体
操作

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)
危险指针
原子类型
(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