200200
201201 < p class ="text-right "> < small >
202202 最終更新日時(UTC):
203- < span itemprop ="datePublished " content ="2025-04-16T13:16:40 ">
204- 2025年04月16日 13時16分40秒
203+ < span itemprop ="datePublished " content ="2025-04-19T12:44:25 ">
204+ 2025年04月19日 12時44分25秒
205205 </ span >
206206 < br />
207207 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
231231 < span class ="n "> < a href ="../../concepts/derived_from.html "> derived_from</ a > </ span > < span class ="o "> <</ span > < span class ="k "> typename</ span > < span class ="n "> < a href ="../../type_traits/remove_cvref.html "> remove_cvref_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Sch</ span > < span class ="o "> >::</ span > < span class ="n "> scheduler_concept</ span > < span class ="p "> ,</ span > < span class ="n "> scheduler_t</ span > < span class ="o "> ></ span > < span class ="o "> &&</ span >
232232 < span class ="n "> < a href ="../queryable.html "> queryable</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Sch</ span > < span class ="o "> ></ span > < span class ="o "> &&</ span >
233233 < span class ="n "> requires</ span > < span class ="p "> (</ span > < span class ="n "> Sch</ span > < span class ="o "> &&</ span > < span class ="n "> sch</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
234- < span class ="p "> {</ span > < span class ="n "> schedule</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../../utility/forward.html "> std::forward</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Sch</ span > < span class ="o "> ></ span > < span class ="p "> (</ span > < span class ="n "> sch</ span > < span class ="p "> ))</ span > < span class ="p "> }</ span > < span class ="o "> -></ span > < span class ="n "> < a href ="sender.html "> sender</ a > </ span > < span class ="p "> ;</ span >
234+ < span class ="p "> {</ span > < span class ="n "> < span href =" https://cpprefjp.github.io/reference/execution/execution/ schedule.md.nolink " > schedule </ span > </ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../../utility/forward.html "> std::forward</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Sch</ span > < span class ="o "> ></ span > < span class ="p "> (</ span > < span class ="n "> sch</ span > < span class ="p "> ))</ span > < span class ="p "> }</ span > < span class ="o "> -></ span > < span class ="n "> < a href ="sender.html "> sender</ a > </ span > < span class ="p "> ;</ span >
235235 < span class ="p "> {</ span > < span class ="k "> auto</ span > < span class ="p "> (</ span > < span class ="n "> < span href ="https://cpprefjp.github.io/reference/execution/execution/get_completion_scheduler.md.nolink "> get_completion_scheduler</ span > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="set_value.html "> set_value_t</ a > </ span > < span class ="o "> ></ span > < span class ="p "> (</ span >
236- < span class ="n "> < a href ="get_env.html "> get_env</ a > </ span > < span class ="p "> (</ span > < span class ="n "> schedule</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../../utility/forward.html "> std::forward</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Sch</ span > < span class ="o "> ></ span > < span class ="p "> (</ span > < span class ="n "> sch</ span > < span class ="p "> )))))</ span > < span class ="p "> }</ span >
236+ < span class ="n "> < a href ="get_env.html "> get_env</ a > </ span > < span class ="p "> (</ span > < span class ="n "> < span href =" https://cpprefjp.github.io/reference/execution/execution/ schedule.md.nolink " > schedule </ span > </ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../../utility/forward.html "> std::forward</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Sch</ span > < span class ="o "> ></ span > < span class ="p "> (</ span > < span class ="n "> sch</ span > < span class ="p "> )))))</ span > < span class ="p "> }</ span >
237237 < span class ="o "> -></ span > < span class ="n "> < a href ="../../concepts/same_as.html "> same_as</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../../type_traits/remove_cvref.html "> remove_cvref_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Sch</ span > < span class ="o "> >></ span > < span class ="p "> ;</ span >
238238 < span class ="p "> }</ span > < span class ="o "> &&</ span >
239239 < span class ="n "> < a href ="../../concepts/equality_comparable.html "> equality_comparable</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../../type_traits/remove_cvref.html "> remove_cvref_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Sch</ span > < span class ="o "> >></ span > < span class ="o "> &&</ span >
@@ -247,14 +247,37 @@ <h2>概要</h2>
247247< p > < code > scheduler</ code > は、型< code > Sch</ code > がScheduler型の要件を満たすことを表すコンセプトである。</ p >
248248< p > 下記をみたすクラス型はSchedulerとみなせる。</ p >
249249< ul >
250- < li > < code > scheduler_t</ code > をメンバ型< code > Sch::scheduler_concept</ code > として定義するクラス </ li >
251- < li > < a href ="../queryable.html "> クエリ可能オブジェクト</ a > であること </ li >
252- < li > < code > Sch</ code > 型の値< code > sch</ code > に対して下記が有効な式であること < ul >
253- < li > < code > < span href ="https://cpprefjp.github.io/reference/execution/execution/schedule.md.nolink "> execution::schedule</ span > (sch)</ code > が< a href ="sender.html "> Sender</ a > を返すこと </ li >
254- < li > < code > < span href =" https://cpprefjp.github.io/reference/execution/execution/get_completion_scheduler.md.nolink " > execution::get_completion_scheduler </ span > < < a href ="set_value.html "> set_value_t </ a > >( < a href =" get_env.html " > execution::get_env </ a > ( < span href ="https://cpprefjp.github.io/reference/execution/execution/schedule .md.nolink "> execution::schedule </ span > (sch))) </ code > の結果が < code > Sch</ code > 型に等しいこと </ li >
250+ < li > < code > scheduler_t</ code > をメンバ型< code > Sch::scheduler_concept</ code > として定義する </ li >
251+ < li > < a href ="../queryable.html "> クエリ可能オブジェクト</ a > である </ li >
252+ < li > < code > Sch</ code > 型の値< code > sch</ code > に対して下記を満たすこと < ul >
253+ < li > < code > < span href ="https://cpprefjp.github.io/reference/execution/execution/schedule.md.nolink "> execution::schedule</ span > (sch)</ code > が< a href ="sender.html "> Sender</ a > を返す </ li >
254+ < li > 上記Senderの < a href ="set_value.html "> 値完了関数 </ a > の < span href ="https://cpprefjp.github.io/reference/execution/execution/get_completion_scheduler .md.nolink "> 完了Scheduler </ span > が < code > Sch</ code > に等しいこと </ li >
255255</ ul >
256256</ li >
257+ < li > コピー可能かつ同値比較可能</ li >
257258</ ul >
259+ < h2 > モデル</ h2 >
260+ < p > 説明専用のエイリアステンプレート< code > value-signature</ code > , コンセプト< code > sender-in-of</ code > を下記の通り定義する。</ p >
261+ < p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> namespace</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> execution</ span > < span class ="p "> {</ span >
262+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> class</ span > < span class ="p "> ...</ span > < span class ="n "> As</ span > < span class ="o "> ></ span >
263+ < span class ="k "> using</ span > < span class ="n "> value</ span > < span class ="o "> -</ span > < span class ="n "> signature</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="set_value.html "> set_value_t</ a > </ span > < span class ="p "> (</ span > < span class ="n "> As</ span > < span class ="p "> ...);</ span >
264+
265+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> Sndr</ span > < span class ="p "> ,</ span > < span class ="k "> class</ span > < span class ="nc "> Env</ span > < span class ="p "> ,</ span > < span class ="n "> class</ span > < span class ="p "> ...</ span > < span class ="n "> Values</ span > < span class ="o "> ></ span >
266+ < span class ="n "> concept</ span > < span class ="n "> sender</ span > < span class ="o "> -</ span > < span class ="n "> in</ span > < span class ="o "> -</ span > < span class ="n "> of</ span > < span class ="o "> =</ span >
267+ < span class ="n "> < a href ="sender_in.html "> sender_in</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Sndr</ span > < span class ="p "> ,</ span > < span class ="n "> Env</ span > < span class ="o "> ></ span > < span class ="o "> &&</ span >
268+ < span class ="n "> MATCHING</ span > < span class ="o "> -</ span > < span class ="n "> SIG</ span > < span class ="p "> (</ span >
269+ < span class ="n "> < a href ="set_value.html "> set_value_t</ a > </ span > < span class ="p "> (</ span > < span class ="n "> Values</ span > < span class ="p "> ...),</ span >
270+ < span class ="n "> < span href ="https://cpprefjp.github.io/reference/execution/execution/value_types_of_t.md.nolink "> value_types_of_t</ span > </ span > < span class ="o "> <</ span > < span class ="n "> Sndr</ span > < span class ="p "> ,</ span > < span class ="n "> Env</ span > < span class ="p "> ,</ span > < span class ="n "> value</ span > < span class ="o "> -</ span > < span class ="n "> signature</ span > < span class ="p "> ,</ span > < span class ="n "> < a href ="../../type_traits/true_type.html "> type_identity_t</ a > </ span > < span class ="o "> ></ span > < span class ="p "> );</ span >
271+ < span class ="p "> }</ span >
272+ </ code > </ pre > </ div >
273+ </ p >
274+ < p > 型< code > Sch</ code > を< code > scheduler</ code > の型、型< code > Env</ code > を< code > < a href ="sender_in.html "> sender_in</ a > <schedule_result_t<Sch>, Env></ code > を満たす実行環境の型としたとき、< code > sender-in-of<schedule_result_t<Sch>, Env></ code > のモデルとなること。</ p >
275+ < p > < code > < a href ="../../concepts/copyable.html "> copyable</ a > <remove_cvref_t<Sch>></ code > および< code > < a href ="../../concepts/equality_comparable.html "> equality_comparable</ a > <remove_cvref_t<Sch>></ code > により要求される操作は、< a class ="cpprefjp-defined-word " data-desc ="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態 "> 例外</ a > で終了してはならない。
276+ これらの操作やScheduler型の< code > < span href ="https://cpprefjp.github.io/reference/execution/execution/schedule.md.nolink "> schedule</ span > </ code > 関数は、異なるスレッドから同時に操作を呼び出す可能性がある場合でも、データ競合を引き起こしてはならない。</ p >
277+ < p > あるScheduler型< code > Sch</ code > の2つの値< code > sch1</ code > と< code > sch2</ code > に対して、< code > sch1</ code > と< code > sch2</ code > が同じ実行リソースを共有する場合に限って、< code > sch1 == sch2</ code > は< code > true</ code > となる。</ p >
278+ < p > あるScheduler< code > sch</ code > に対して、式< code > < span href ="https://cpprefjp.github.io/reference/execution/execution/get_completion_scheduler.md.nolink "> get_completion_scheduler</ span > << a href ="set_value.html "> set_value_t</ a > >(< a href ="get_env.html "> get_env</ a > (< span href ="https://cpprefjp.github.io/reference/execution/execution/schedule.md.nolink "> schedule</ span > (sch)))</ code > が< code > sch</ code > と等しいこと。</ p >
279+ < p > あるScheduler< code > sch</ code > に対して式< code > < span href ="https://cpprefjp.github.io/reference/execution/execution/get_domain.md.nolink "> get_domain</ span > (sch)</ code > が< a class ="cpprefjp-defined-word " data-desc ="プログラムが文法規則・診断対象の意味規則・単一定義規則を満たすこと " href ="../../../implementation-compliance.html#dfn-well-formed "> 適格</ a > であるとき、式< code > get_domain(< a href ="get_env.html "> get_env</ a > (schedule(sch)))</ code > も< a class ="cpprefjp-defined-word " data-desc ="プログラムが文法規則・診断対象の意味規則・単一定義規則を満たすこと " href ="../../../implementation-compliance.html#dfn-well-formed "> 適格</ a > であり、かつ同じ型を持つ。</ p >
280+ < p > Scheduler型のデストラクタは、< code > schedule</ code > が返すSenderオブジェクトに接続されたReceiverの完了を待機してブロックしてはならない。</ p >
258281< h2 > 例</ h2 >
259282< p > < div class ="yata " id ="ffa0b39ad40caa8669517508a07b4044e1c84bc6 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../execution.html "> <execution></ a > </ span > < span class ="cp "> </ span >
260283< span class ="k "> namespace</ span > < span class ="n "> ex</ span > < span class ="o "> =</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> execution</ span > < span class ="p "> ;</ span >
0 commit comments