33.3 ストップトークン (Stop Tokens) (thread.stoptoken)
編集33.3.1 イントロダクション (thread.stoptoken.intro)
編集- 概要
- §33.3は、操作の停止を非同期でリクエストするためのコンポーネントについて説明しています。通常、結果が不要になった場合に操作を停止するために使用されます。このようなリクエストは「ストップリクエスト」と呼ばれます。
- 共有所有権のセマンティクス
stop_source
、stop_token
、およびstop_callback
は、ストップ状態の共有所有権のセマンティクスを実装しています。同じストップ状態を共有するstop_source
、stop_token
、またはstop_callback
は、それぞれ関連するstop_source
、stop_token
、またはstop_callback
です。ストップ状態の最後の所有者がそのリソースを自動的に解放します。
- ストップトークンの使用方法
stop_token
は操作に渡すことができ、操作は次のいずれかを実行できます。- トークンを積極的にポーリングしてストップリクエストがあったかどうかを確認する。
- ストップリクエストがあった場合に呼び出されるコールバックを
stop_callback
クラステンプレートを使用して登録する。
- ストップリクエストが
stop_source
を介して行われると、すべての関連するstop_token
およびstop_source
オブジェクトに表示されます。一度行われたストップリクエストは取り消すことができません(後続のストップリクエストは効果がありません)。
- コールバックの呼び出し
stop_callback
オブジェクトを介して登録されたコールバックは、関連するstop_source
オブジェクトによって最初にストップリクエストが行われたときに呼び出されます。
- 関数呼び出しとデータ競合
request_stop
、stop_requested
、およびstop_possible
の関数呼び出しはデータ競合を引き起こしません。request_stop
の呼び出しがtrue
を返す場合、それは関連するstop_token
またはstop_source
オブジェクトのstop_requested
の呼び出しと同期し、その呼び出しはtrue
を返します。コールバックの登録は、そのコールバックの呼び出しと同期します。
33.3.2 ヘッダー<stop_token>の概要 (thread.stoptoken.syn)
編集<stop_token>
ヘッダーの概要は以下のように宣言されています。
namespace std { class stop_source; class stop_token; template <typename Callback> class stop_callback; }
このヘッダーには、stop_source
、stop_token
、およびstop_callback
という3つの主要なクラスが含まれています。stop_source
はストップリクエストを発行するためのクラスであり、stop_token
は操作に渡されるトークンです。stop_callback
はストップリクエストが行われた際に呼び出されるコールバックを登録するためのテンプレートクラスです。
各クラスは、非同期操作の停止を効果的に管理するためのメカニズムを提供します。これにより、不要な計算やリソースの浪費を避けることができます。