200
200
201
201
< p class ="text-right "> < small >
202
202
最終更新日時(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秒
205
205
</ span >
206
206
< br />
207
207
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
231
231
< 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 >
232
232
< 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 >
233
233
< 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 >
235
235
< 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 >
237
237
< 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 >
238
238
< span class ="p "> }</ span > < span class ="o "> &&</ span >
239
239
< 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>
247
247
< p > < code > scheduler</ code > は、型< code > Sch</ code > がScheduler型の要件を満たすことを表すコンセプトである。</ p >
248
248
< p > 下記をみたすクラス型はSchedulerとみなせる。</ p >
249
249
< 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 >
255
255
</ ul >
256
256
</ li >
257
+ < li > コピー可能かつ同値比較可能</ li >
257
258
</ 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 >
258
281
< h2 > 例</ h2 >
259
282
< 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 >
260
283
< 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