命名空间
变体
操作

std::stop_source::request_stop

来自 cppreference.cn
< cpp‎ | thread‎ | stop source
 
 
并发支持库
线程
(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 中已弃用)
原子操作的自由函数
原子标志的自由函数
 
 
bool request_stop() noexcept;
(C++20 起)

向停止状态(stop-state)发出停止请求,前提是 stop_source 对象拥有一个停止状态,且该状态尚未被请求停止。

这个决定是原子地做出的,如果请求了停止,停止状态会原子地更新以避免竞争条件,这样一来:

  • stop_requested()stop_possible() 可以被其他共享同一停止状态的 stop_tokenstop_source 并发地调用;
  • request_stop() 可以被其他 stop_source 对象并发地调用,而只有一个会实际执行停止请求。

不过,请参阅“注意”一节。

目录

[编辑] 参数

(无)

[编辑] 返回值

如果 stop_source 对象拥有一个停止状态且本次调用发出了停止请求,则返回 true,否则返回 false

[编辑] 后置条件

stop_possible()falsestop_requested()true

[编辑] 注意

如果 request_stop() 确实发出了停止请求(即返回 true),那么所有为同一关联停止状态注册的 stop_callback 将会在调用 request_stop() 的同一线程上同步地被调用。如果某个回调的调用因异常而退出,将会调用 std::terminate

如果 stop_source 对象拥有一个停止状态但已经发出了停止请求,那么此函数返回 false。但是,不能保证另一个刚刚(成功)请求停止的 stop_source 对象没有正在调用某个 stop_callback 函数的过程中。

如果 request_stop() 确实发出了停止请求(即返回 true),那么所有与此 stop_source 的停止状态相关联的 stop_token 一起注册了可中断等待的、基类型为 std::condition_variable_any 的条件变量都将被通知。

[编辑] 示例