命名空间
变体
操作

std::stop_callback<Callback>::~stop_callback

来自 cppreference.com
 
 
并发支持库
线程
(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++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 中已弃用)
内存排序
用于原子操作的自由函数
用于原子标志的自由函数
 
std::stop_callback
成员函数
stop_callback::~stop_callback
推导指南
 
~stop_callback();
(自 C++20 起)

销毁 stop_callback 对象。

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

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

[编辑] 备注

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

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