Namespaces
Variants

std::stop_source:: request_stop

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
bool request_stop ( ) noexcept ;
(自 C++20 起)

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

该判断以原子方式执行,如果已请求停止,停止状态会以原子方式更新以避免竞态条件,具体表现为:

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

然而,请参阅注释部分。

目录

参数

(无)

返回值

stop_source 对象具有停止状态且本次调用发出了停止请求时返回 true ,否则返回 false

后置条件

stop_possible ( ) false stop_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 条件变量都将收到通知。

示例