std::jthread::request_stop
bool request_stop()noexcept; | (C++20以上) | |
まだ停止が要求されていなければ、内部の停止状態に停止要求を発行します。
判断はアトミックに行われ、停止が要求された場合は、競合状態を回避するため、停止状態はアトミックに更新されます。
- stop_requested() および stop_possible() は同じ停止状態を共有する他の std::stop_token および std::stop_source に対して並行的に呼ぶことができます。
- request_stop() は同じ
jthread
オブジェクトに対してまたは同じ停止状態に紐付く別の std::stop_source に対して複数のスレッドから並行的に呼ぶことができ、そのうちのひとつだけが実際に停止要求を行います。
しかし、ノートを参照してください。
目次 |
[編集]引数
(なし)
[編集]戻り値
この呼び出しが停止要求を行った場合は true、そうでなければ false。
[編集]事後条件
get_stop_token() によって取得した std::stop_token または get_stop_source() によって取得した std::stop_source の場合、 stop_requested() は true になります。
[編集]ノート
request_stop() が停止要求を発行する (すなわち true を返す) 場合は、同じ紐付いた停止状態に登録されたあらゆる std::stop_callback が、 request_stop() が発行されたのと同じスレッドで、同期的に呼ばれます。 コールバックの呼び出しが例外で終了した場合は、 std::terminate が呼ばれます。
停止要求がすでに行われていた場合は、この関数は false を返します。 しかし、別のスレッドまたは std::stop_source オブジェクトが同じ停止状態に対してちょうど停止要求を行ったところで未だ std::stop_callback の呼び出しの途中かもしれないことに注意してください。
request_stop() が停止要求を発行する (すなわち true を返す) 場合は、 jthread
内部の停止状態に紐付いた std::stop_token に対する割り込み可能な待機で登録された基底型 std::condition_variable_any のすべての条件変数が起床されます。
[編集]例
This section is incomplete Reason: no example |