Skip to content

Commit 09c7fcd

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent 6aadab6 commit 09c7fcd

File tree

4 files changed

+188
-1083
lines changed

4 files changed

+188
-1083
lines changed

reference/execution/execution/associate.html

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868

6969
</head>
7070
<body>
71-
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;execution&#34;], &#34;id-type&#34;: [&#34;cpo&#34;], &#34;namespace&#34;: [&#34;std::execution&#34;], &#34;cpp&#34;: [&#34;cpp26&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;160fcf1daa366e1a586a2f52e89673ed76b36f87&#34;, &#34;source&#34;: &#34;#include &lt;execution&gt;\nnamespace ex = std::execution;\n\nint main()\n{\n ex::counting_scope scope;\n ex::sender auto sndr =\n ex::just(42)\n | ex::associate(scope.get_token());\n\n std::this_thread::sync_wait(sndr);\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;execution&#34;, &#34;execution&#34;, &#34;associate&#34;]}">
71+
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;execution&#34;], &#34;id-type&#34;: [&#34;cpo&#34;], &#34;namespace&#34;: [&#34;std::execution&#34;], &#34;cpp&#34;: [&#34;cpp26&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;07c3b1623cbb97fb841cb8eb72aa4b49c5cdd48e&#34;, &#34;source&#34;: &#34;#include &lt;execution&gt;\n#include &lt;print&gt;\nnamespace ex = std::execution;\n\nint main()\n{\n // \u975e\u540c\u671f\u30b9\u30b3\u30fc\u30d7\u3092\u5b9a\u7fa9\n ex::counting_scope scope;\n\n // Sender\u3068\u975e\u540c\u671f\u30b9\u30b3\u30fc\u30d7\u3092\u95a2\u9023\u4ed8\u3051\n ex::sender auto sndr =\n ex::just(42)\n | ex::associate(scope.get_token());\n\n // \u30bf\u30b9\u30af\u958b\u59cb\u3068\u5b8c\u4e86\u5f85\u6a5f\n auto result = std::this_thread::sync_wait(std::move(sndr));\n std::println(\&#34;value={}\&#34;, *result);\n\n // \u975e\u540c\u671f\u30b9\u30b3\u30fc\u30d7\u306e\u5408\u6d41\u5f85\u6a5f\n std::this_thread::sync_wait(scope.join());\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;execution&#34;, &#34;execution&#34;, &#34;associate&#34;]}">
7272
<nav class="navbar navbar-default" role="navigation">
7373
<div class="container-fluid">
7474
<div class="navbar-header">
@@ -200,8 +200,8 @@
200200

201201
<p class="text-right"><small>
202202
最終更新日時(UTC):
203-
<span itemprop="datePublished" content="2025-09-20T16:19:24">
204-
2025年09月20日 16時19分24秒
203+
<span itemprop="datePublished" content="2025-09-22T02:51:16">
204+
2025年09月22日 02時51分16秒
205205
</span>
206206
<br/>
207207
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -235,6 +235,30 @@ <h2>概要</h2>
235235
<p><code>associate</code>は、入力<a href="sender.html">Sender</a>と非同期スコープとの関連付けを行うSenderアダプタである。
236236
関連付けられた非同期スコープは、Senderが作成した非<a class="cpprefjp-defined-word" data-desc="マルチスレッド実行時にリソースの所有権に基づいて実行順序を制御する操作">同期操作</a>の生存期間を追跡できる。</p>
237237
<p><code>associate</code><a href="sender_adaptor_closure.html">パイプ可能Senderアダプタオブジェクト</a>であり、パイプライン記法をサポートする。</p>
238+
<p><code>associate</code>アルゴリズムが返す関連Sender(associate-sender)は、<a href="scope_token.html">非同期スコープトークン</a>を介した関連付け試行(<code>try_associate</code>)の結果に応じてassociated/unassociatedいずれかの状態となり、入力Senderの動作を継承したうえで下記のように振る舞う。</p>
239+
<ul>
240+
<li>associated状態<ul>
241+
<li>関連Senderは入力Senderと同じ完了シグネチャを持ち、関連Senderとの<a href="connect.html">接続(connect)</a><a href="start.html">開始(start)</a>によって入力Senderとの接続や開始が行われる。</li>
242+
<li>関連Senderオブジェクトが破棄、もしくは接続後の<a href="operation_state.html">Operation State</a>が破棄されたとき、関連付けを解除する。</li>
243+
<li><a href="scope_token.html">非同期スコープトークン</a><code>wrap</code>メンバ関数で追加される処理を行う。</li>
244+
</ul>
245+
</li>
246+
<li>unassociated状態 :<ul>
247+
<li>入力Senderは破棄され、<a href="connect.html">接続(connect)</a><a href="start.html">開始(start)</a>もされない。</li>
248+
<li>関連Senderは<a href="set_stopped.html">set_stopped</a>のみで完了する。</li>
249+
</ul>
250+
</li>
251+
</ul>
252+
<p>associated状態の関連Senderに対する<a href="connect.html">接続(connect)</a>操作は、下記いずれかの結果となる。</p>
253+
<ul>
254+
<li>右辺値接続(rvalue connected)のとき、入力Senderとの関連付けは<a href="operation_state.html">Operation State</a>へ移動する。</li>
255+
<li>左辺値接続(lvalue connected)のとき、<a href="operation_state.html">Operation State</a>は非同期スコープとの新たな関連付けを必要とするため、<a href="scope_token.html">非同期スコープトークン</a><code>try_associate</code>を呼び出して下記のいずれかの結果となる。<ul>
256+
<li>新たな関連付けに成功する(<a class="cpprefjp-defined-word" data-desc="関数呼び出し式の評価結果となるオブジェクト・値">戻り値</a><code>true</code>)。</li>
257+
<li>関連付けに失敗し(<a class="cpprefjp-defined-word" data-desc="関数呼び出し式の評価結果となるオブジェクト・値">戻り値</a><code>false</code>)、<a href="operation_state.html">Operation State</a>はunassociated状態の関連Senderから構築されたかのように振る舞う(<a href="start.html">開始(start)</a>操作により即時で<a href="set_stopped.html">停止完了</a>する)。</li>
258+
<li><a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>送出によって接続操作に失敗する。</li>
259+
</ul>
260+
</li>
261+
</ul>
238262
<h2>効果</h2>
239263
<p>説明用の式<code>sndr</code><code>token</code>に対して、<code>decltype((sndr))</code><code><a href="sender.html">sender</a></code>を満たさない、もしくは<code><a href="../../type_traits/remove_cvref.html">remove_cvref_t</a>&lt;decltype((token))&gt;</code><code><a href="scope_token.html">scope_token</a></code>を満たさないとき、呼び出し式<code>associate(sndr, token)</code><a class="cpprefjp-defined-word" data-desc="プログラムが適格でないこと。コンパイルエラーなどになる" href="../../../implementation-compliance.html#dfn-ill-formed">不適格</a>となる。</p>
240264
<p>そうでなければ、呼び出し式<code>associate(sndr, token)</code><code>sndr</code>が1回だけ評価されることを除いて、下記と等価。</p>
@@ -252,10 +276,10 @@ <h3>Senderアルゴリズムタグ <code>associate</code></h3>
252276
<span class="k">static</span> <span class="k">constexpr</span> <span class="k">auto</span> <span class="n">start</span> <span class="o">=</span> <span class="n"><i>see below</i></span><span class="p">;</span> <span class="c1">// exposition only</span>
253277

254278
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Sndr</span><span class="p">,</span> <span class="n">class</span><span class="p">...</span> <span class="n">Env</span><span class="o">&gt;</span>
255-
<span class="k">static</span> <span class="n">consteval</span> <span class="kt">void</span> <span class="n">check</span><span class="o">-</span><span class="n">types</span><span class="p">()</span> <span class="p">{</span> <span class="c1">// exposition only</span>
256-
<span class="k">using</span> <span class="n">associate_data_t</span> <span class="o">=</span> <span class="n"><a href="../../type_traits/remove_cvref.html">remove_cvref_t</a></span><span class="o">&lt;</span><span class="n"><a href="data-type.html">data-type</a></span><span class="o">&lt;</span><span class="n">Sndr</span><span class="o">&gt;&gt;</span><span class="p">;</span>
257-
<span class="k">using</span> <span class="n">child_type_t</span> <span class="o">=</span> <span class="k">typename</span> <span class="n">associate_data_t</span><span class="o">::</span><span class="n">wrap</span><span class="o">-</span><span class="n">sender</span><span class="p">;</span>
258-
<span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n"><a href="get_completion_signatures.html">get_completion_signatures</a></span><span class="o">&lt;</span><span class="n">child_type_t</span><span class="p">,</span> <span class="n"><a href="../forwarding_query.html">FWD-ENV-T</a></span><span class="p">(</span><span class="n">Env</span><span class="p">)...</span><span class="o">&gt;</span><span class="p">();</span>
279+
<span class="k">static</span> <span class="n">consteval</span> <span class="kt">void</span> <span class="n">check</span><span class="o">-</span><span class="n">types</span><span class="p">()</span> <span class="p">{</span> <span class="c1">// exposition only</span>
280+
<span class="k">using</span> <span class="n">associate_data_t</span> <span class="o">=</span> <span class="n"><a href="../../type_traits/remove_cvref.html">remove_cvref_t</a></span><span class="o">&lt;</span><span class="n"><a href="data-type.html">data-type</a></span><span class="o">&lt;</span><span class="n">Sndr</span><span class="o">&gt;&gt;</span><span class="p">;</span>
281+
<span class="k">using</span> <span class="n">child_type_t</span> <span class="o">=</span> <span class="k">typename</span> <span class="n">associate_data_t</span><span class="o">::</span><span class="n">wrap</span><span class="o">-</span><span class="n">sender</span><span class="p">;</span>
282+
<span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n"><a href="get_completion_signatures.html">get_completion_signatures</a></span><span class="o">&lt;</span><span class="n">child_type_t</span><span class="p">,</span> <span class="n"><a href="../forwarding_query.html">FWD-ENV-T</a></span><span class="p">(</span><span class="n">Env</span><span class="p">)...</span><span class="o">&gt;</span><span class="p">();</span>
259283
<span class="p">}</span>
260284
<span class="p">};</span>
261285
<span class="p">}</span>
@@ -341,7 +365,7 @@ <h2>説明専用エンティティ</h2>
341365
<span class="o">:</span> <span class="n">sndr</span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="n">wrap</span><span class="p">(</span><span class="n"><a href="../../utility/forward.html">std::forward</a></span><span class="o">&lt;</span><span class="n">Sender</span><span class="o">&gt;</span><span class="p">(</span><span class="n">s</span><span class="p">))),</span>
342366
<span class="n">token</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> <span class="p">{</span>
343367
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">token</span><span class="p">.</span><span class="n">try_associate</span><span class="p">())</span>
344-
<span class="n">sndr</span><span class="p">.</span><span class="n">reset</span><span class="p">();</span>
368+
<span class="n">sndr</span><span class="p">.</span><span class="n"><a href="../../optional/optional/reset.html">reset()</a></span><span class="p">;</span>
345369
<span class="p">}</span>
346370

347371
<span class="n">associate</span><span class="o">-</span><span class="n">data</span><span class="p">(</span><span class="k">const</span> <span class="n">associate</span><span class="o">-</span><span class="n">data</span><span class="o">&amp;</span> <span class="n">other</span><span class="p">)</span>
@@ -408,22 +432,32 @@ <h2>カスタマイゼーションポイント</h2>
408432
<p>Senderアルゴリズム構築時および<a href="receiver.html">Receiver</a>接続時に、関連付けられた実行ドメインに対して<code><a href="transform_sender.html">execution::transform_sender</a></code>経由でSender変換が行われる。
409433
<a href="default_domain.html">デフォルト実行ドメイン</a>では無変換。</p>
410434
<h2></h2>
411-
<p><div class="yata" id="160fcf1daa366e1a586a2f52e89673ed76b36f87"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../../execution.html">&lt;execution&gt;</a></span><span class="cp"></span>
435+
<p><div class="yata" id="07c3b1623cbb97fb841cb8eb72aa4b49c5cdd48e"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../../execution.html">&lt;execution&gt;</a></span><span class="cp"></span>
436+
<span class="cp">#include</span> <span class="cpf"><a href="../../print.html">&lt;print&gt;</a></span><span class="cp"></span>
412437
<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>
413438

414439
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
415440
<span class="p">{</span>
441+
<span class="c1">// 非同期スコープを定義</span>
416442
<span class="n"><a href="counting_scope.html">ex::counting_scope</a></span> <span class="n">scope</span><span class="p">;</span>
443+
444+
<span class="c1">// Senderと非同期スコープを関連付け</span>
417445
<span class="n"><a href="sender.html">ex::sender</a></span> <span class="k">auto</span> <span class="n">sndr</span> <span class="o">=</span>
418446
<span class="n"><a href="just.html">ex::just</a></span><span class="p">(</span><span class="mi">42</span><span class="p">)</span>
419-
<span class="o">|</span> <span class="n"><span style="color:#ff0000">ex::associate</span></span><span class="p">(</span><span class="n">scope</span><span class="p">.</span><span class="n">get_token</span><span class="p">());</span>
447+
<span class="o">|</span> <span class="n"><span style="color:#ff0000">ex::associate</span></span><span class="p">(</span><span class="n">scope</span><span class="p">.</span><span class="n"><a href="counting_scope/get_token.html">get_token()</a></span><span class="p">);</span>
448+
449+
<span class="c1">// タスク開始と完了待機</span>
450+
<span class="k">auto</span> <span class="n">result</span> <span class="o">=</span> <span class="n"><a href="../this_thread/sync_wait.html">std::this_thread::sync_wait</a></span><span class="p">(</span><span class="n"><a href="../../utility/move.html">std::move</a></span><span class="p">(</span><span class="n">sndr</span><span class="p">));</span>
451+
<span class="n"><a href="../../print/println.html">std::println</a></span><span class="p">(</span><span class="s">"value={}"</span><span class="p">,</span> <span class="o">*</span><span class="n">result</span><span class="p">);</span>
420452

421-
<span class="n"><a href="../this_thread/sync_wait.html">std::this_thread::sync_wait</a></span><span class="p">(</span><span class="n">sndr</span><span class="p">);</span>
453+
<span class="c1">// 非同期スコープの合流待機</span>
454+
<span class="n"><a href="../this_thread/sync_wait.html">std::this_thread::sync_wait</a></span><span class="p">(</span><span class="n">scope</span><span class="p">.</span><span class="n"><a href="counting_scope/join.html">join()</a></span><span class="p">);</span>
422455
<span class="p">}</span>
423456
</code></pre></div>
424457
</div></p>
425458
<h3>出力</h3>
426-
<p><pre><code></code></pre></p>
459+
<p><pre><code>value=42
460+
</code></pre></p>
427461
<h2>バージョン</h2>
428462
<h3>言語</h3>
429463
<ul>

reference/execution/execution/scope_token.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@
200200

201201
<p class="text-right"><small>
202202
最終更新日時(UTC):
203-
<span itemprop="datePublished" content="2025-09-20T16:19:24">
204-
2025年09月20日 16時19分24秒
203+
<span itemprop="datePublished" content="2025-09-22T02:51:16">
204+
2025年09月22日 02時51分16秒
205205
</span>
206206
<br/>
207207
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -258,7 +258,7 @@ <h2>例</h2>
258258
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
259259
<span class="p">{</span>
260260
<span class="n"><a href="counting_scope.html">ex::counting_scope</a></span> <span class="n">scope</span><span class="p">;</span>
261-
<span class="n"><span style="color:#ff0000">ex::scope_token</span></span> <span class="k">auto</span> <span class="n">token</span> <span class="o">=</span> <span class="n">scope</span><span class="p">.</span><span class="n">get_token</span><span class="p">();</span>
261+
<span class="n"><span style="color:#ff0000">ex::scope_token</span></span> <span class="k">auto</span> <span class="n">token</span> <span class="o">=</span> <span class="n">scope</span><span class="p">.</span><span class="n"><a href="counting_scope/get_token.html">get_token()</a></span><span class="p">;</span>
262262
<span class="p">}</span>
263263
</code></pre></div>
264264
</div></p>

0 commit comments

Comments
 (0)