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