最終更新日時: 2026年06月08日 10時24分20秒 (JST)
yoh が更新

履歴 編集

function
<execution>

# std::execution::parallel_scheduler_replacement::parallel_scheduler_backend::schedule_bulk_unchunked(C++26)

    virtual void schedule_bulk_unchunked(size_t n,
                                         bulk_item_receiver_proxy& r,
                                         span<byte> s) noexcept = 0;

## 概要

`parallel_scheduler`による`bulk_unchunked`アルゴリズムカスタマイズのバックエンド側を実装する。

## 事前条件

`*this`、`r`が参照するオブジェクト、`s`が参照するストレージの生存期間終了は、`r`に対する`set_value`／`set_error`／`set_stopped`いずれかの呼び出しの評価開始よりも後に発生すること。

## 効果

派生クラスでは、この関数を下記のように実装すべきである。

- 下記いずれかの式が評価される
  - エラーが発生せず作業が成功したとき、`r.set_value()`
  - エラーが発生したとき、`eptr`を`exception_ptr`型のオブジェクトとして、`r.set_error(eptr)`
  - 作業がキャンセルされたとき、`r.set_stopped()`
- `r.execute(b, e)`が呼ばれたとき、`b`は範囲`[0, n)`内かつ`e`は`b + 1`に等しい。`[0, n)`の各`i`について、`r.execute(i, i + 1)`の呼び出しが最大で1つだけ存在する。
- `r.set_value()`が呼び出されたとき、`[0, n)`の各`i`に対して、`r.execute(i, i + 1)`の呼び出しが正確に1つだけ存在する。
- `r`上での全ての`execute`呼び出しは、`r`上での`set_value`／`set_error`／`set_stopped`いずれかの呼び出しよりも前に発生する。
- `r`上での全ての`execute`および`set_value`呼び出しは、`*this`で表される実行コンテキストの実行エージェント上で行われる。

## 備考

`s`が参照するストレージは、この呼び出しによって開始された操作の実行期間中`*this`によって一時的なストレージとして使用される可能性がある。

## バージョン

### 言語

- C++26

### 処理系

- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??

## 関連項目

- `execution::bulk_unchunked`
- `execution::parallel_scheduler`

## 参照

- P2079R10 Parallel scheduler
- P3914R0 Assorted NB comment resolutions for Kona 2025, US 265-398, 266-399