- execution[meta header]
- concept[meta id-type]
- std::execution[meta namespace]
- cpp26[meta cpp]
namespace std::execution {
template<class Sch>
concept scheduler =
derived_from<typename remove_cvref_t<Sch>::scheduler_concept, scheduler_t> &&
queryable<Sch> &&
requires(Sch&& sch) {
{ schedule(std::forward<Sch>(sch)) } -> sender;
{ auto(get_completion_scheduler<set_value_t>(
get_env(schedule(std::forward<Sch>(sch))))) }
-> same_as<remove_cvref_t<Sch>>;
} &&
equality_comparable<remove_cvref_t<Sch>> &&
copyable<remove_cvref_t<Sch>>;
struct scheduler_t {}; // タグ型
}- derived_from[link /reference/concepts/derived_from.md]
- sender[link sender.md]
- queryable[link ../queryable.md]
- schedule[link schedule.md]
- get_completion_scheduler[link get_completion_scheduler.md]
- set_value_t[link set_value.md]
- get_env[link get_env.md]
- copyable[link /reference/concepts/copyable.md]
schedulerは、型SchがScheduler型の要件を満たすことを表すコンセプトである。
下記をみたすクラス型はSchedulerとみなせる。
scheduler_tをメンバ型Sch::scheduler_conceptとして定義する- クエリ可能オブジェクトである
Sch型の値schに対して下記を満たすことexecution::schedule(sch)がSenderを返す- 上記Senderの値完了関数の完了Schedulerが
Schに等しいこと
- コピー可能かつ同値比較可能
型Schをschedulerの型、型Envをsender_in<schedule_result_t<Sch>, Env>を満たす実行環境の型としたとき、sender-in-of<schedule_result_t<Sch>, Env>のモデルとなること。
copyable<remove_cvref_t<Sch>>およびequality_comparable<remove_cvref_t<Sch>>により要求される操作は、例外で終了してはならない。
これらの操作やScheduler型のschedule関数は、異なるスレッドから同時に操作を呼び出す可能性がある場合でも、データ競合を引き起こしてはならない。
あるScheduler型Schの2つの値sch1とsch2に対して、sch1とsch2が同じ実行リソースを共有する場合に限って、sch1 == sch2はtrueとなる。
あるSchedulerschに対して、式get_completion_scheduler<set_value_t>(get_env(schedule(sch)))がschと等しいこと。
あるSchedulerschに対して式get_domain(sch)が適格であるとき、式get_domain(get_env(schedule(sch)))も適格であり、かつ同じ型を持つ。
Scheduler型のデストラクタは、scheduleが返すSenderオブジェクトに接続されたReceiverの完了を待機してブロックしてはならない。
説明用のSchedulerschに対して、式SCHED-ATTRS(sch)はqueryableを満たす型の式o1となり、下記を満たす。
- 型
Tagがset_value_tもしくはset_stopped_tのとき、式o1.query(get_completion_scheduler<Tag>)の型および値がschと等しい。 - 式
o1.query(get_domain)はsch.query(get_domain)と等価。
説明用のSchedulerschに対して、式SCHED-ENV(sch)はqueryableを満たす型の式o2となり、下記を満たす。
- 式
o2.query(get_scheduler)は、型および値がschと等しい右辺値。 - 式
o2.query(get_domain)はsch.query(get_domain)と等価。
#include <execution>
namespace ex = std::execution;
int main()
{
ex::run_loop loop;
ex::scheduler auto sch = loop.get_scheduler();
}- ex::scheduler[color ff0000]
- ex::run_loop[link run_loop.md]
- get_scheduler()[link run_loop/get_scheduler.md]
- C++26
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??