最終更新日時(UTC):
が更新

履歴 編集

concept
<execution>

std::execution::scheduler(C++26)

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 {};  // タグ型
}

概要

schedulerは、型SchがScheduler型の要件を満たすことを表すコンセプトである。

下記をみたすクラス型はSchedulerとみなせる。

モデル

説明専用のエイリアステンプレートvalue-signature, コンセプトsender-in-ofを下記の通り定義する。

namespace std::execution {
  template<class... As>
  using value-signature = set_value_t(As...);

  template<class Sndr, class Env, class... Values>
  concept sender-in-of =
    sender_in<Sndr, Env> &&
    MATCHING-SIG(
      set_value_t(Values...),
      value_types_of_t<Sndr, Env, value-signature, type_identity_t>);
}

Schschedulerの型、型Envsender_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つの値sch1sch2に対して、sch1sch2が同じ実行リソースを共有する場合に限って、sch1 == sch2trueとなる。

ある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の完了を待機してブロックしてはならない。

説明専用エンティティ

SCHED-ATTRS

説明用のSchedulerschに対して、式SCHED-ATTRS(sch)queryableを満たす型の式o1となり、下記を満たす。

SCHED-ENV

説明用のSchedulerschに対して、式SCHED-ENV(sch)queryableを満たす型の式o2となり、下記を満たす。

#include <execution>
namespace ex = std::execution;

int main()
{
  ex::run_loop loop;
  ex::scheduler auto sch = loop.get_scheduler();
}

出力

バージョン

言語

  • C++26

処理系

関連項目

参照