命名空间
变体
操作

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)
Hazard 指针
原子类型
(C++11)
(C++20)
原子类型的初始化
(C++11)(C++20 中已弃用)
(C++11)(C++20 中已弃用)
内存排序
(C++11)(C++26 中已弃用)
原子操作的自由函数
原子标志的自由函数
 
 
bool request_stop() noexcept;
(since C++20)

如果 stop_source 对象拥有停止状态,且尚未请求停止,则向停止状态发出停止请求。

此判定是原子性的,如果已请求停止,则原子性地更新停止状态以避免竞态条件,从而:

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

但是,请参阅“注意”部分。

目录

[编辑] 参数

(无)

[编辑] 返回值

true 如果 stop_source 对象拥有停止状态,并且此调用发出了停止请求,否则为 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 基类型的条件变量。

[编辑] 示例