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
。