std::stop_callback<Callback>::~stop_callback
来自 cppreference.cn
< cpp | thread | stop callback
~stop_callback(); |
(自 C++20 起) | |
销毁 stop_callback
对象。
如果 *this
拥有带有关联停止状态的 stop_token
,则从中注销回调。
如果回调函数正在另一个线程上并发调用,则析构函数不会完成,直到回调函数调用完成。如果回调函数正在与调用析构函数的同一线程上调用,则析构函数将返回,而无需等待回调调用完成(参见“注释”)。
[编辑] 注释
stop_callback
析构函数旨在防止竞争条件和死锁。如果另一个线程当前正在调用回调,则析构函数无法返回,直到该调用完成,否则函数对象可能会在执行时被销毁。回调函数不需要可复制或可移动 - 它即使在注册后也存在于 stop_callback
对象本身中。
另一方面,如果调用析构函数的当前线程与正在调用回调的线程是同一线程,则析构函数不能等待,否则会发生死锁。同一个线程在调用其回调函数的同时销毁 stop_callback
是可能且有效的,因为回调函数本身可能会直接或间接地销毁 stop_callback
。