|
68 | 68 |
|
69 | 69 | </head>
|
70 | 70 | <body>
|
71 |
| -<header data-kunai-mdinfo="{"meta": {"header": ["atomic"], "namespace": ["std"], "id-type": ["function template"], "cpp": ["cpp11"]}, "sources": [{"id": "29f6abc6eaff55af305da4fa35ddbc18fcd92228", "source": "#include <iostream>\n#include <atomic>\n#include <thread>\n\nstd::atomic<int> a(-1);\nint table[10];\n\nvoid f()\n{\n table[3] = 5;\n table[5] = -1;\n a.store(3, std::memory_order_release);\n}\n\nint main()\n{\n std::thread t1(f);\n\n int r0;\n do {\n r0 = a.load(std::memory_order_consume);\n } while (r0 < 0);\n std::cout << r0 << std::endl; // \u6b63\u3057\u304f\u540c\u671f\u5316\u3055\u308c\u3066\u304a\u308a\u3001\u5fc5\u305a\"3\"\u304c\u51fa\u529b\u3055\u308c\u308b\u3002\n\n int r1 = table[r0];\n std::cout << r1 << std::endl; // \u6b63\u3057\u304f\u540c\u671f\u5316\u3055\u308c\u3066\u304a\u308a\u3001\u5fc5\u305a\"5\"\u304c\u51fa\u529b\u3055\u308c\u308b\u3002\n\n int r2 = table[r1];\n std::cout << r2 << std::endl; // \u6b63\u3057\u304f\u540c\u671f\u5316\u3055\u308c\u3066\u304a\u308a\u3001\u5fc5\u305a\"-1\"\u304c\u51fa\u529b\u3055\u308c\u308b\u3002\n\n int r3 = table[std::kill_dependency(r1)]; // data race. \u672a\u5b9a\u7fa9\u52d5\u4f5c\u3002\n std::cout << r3 << std::endl; // \u6700\u9069\u5316\u306a\u3069\u306e\u7d50\u679c\u3001\"-1\"\u4ee5\u5916\u304c\u51fa\u529b\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3002\n\n\n t1.join();\n}\n"}], "page_id": ["reference", "atomic", "kill_dependency"]}"> |
| 71 | +<header data-kunai-mdinfo="{"meta": {"header": ["atomic"], "namespace": ["std"], "id-type": ["function template"], "cpp": ["cpp11", "cpp26deprecated"]}, "sources": [{"id": "29f6abc6eaff55af305da4fa35ddbc18fcd92228", "source": "#include <iostream>\n#include <atomic>\n#include <thread>\n\nstd::atomic<int> a(-1);\nint table[10];\n\nvoid f()\n{\n table[3] = 5;\n table[5] = -1;\n a.store(3, std::memory_order_release);\n}\n\nint main()\n{\n std::thread t1(f);\n\n int r0;\n do {\n r0 = a.load(std::memory_order_consume);\n } while (r0 < 0);\n std::cout << r0 << std::endl; // \u6b63\u3057\u304f\u540c\u671f\u5316\u3055\u308c\u3066\u304a\u308a\u3001\u5fc5\u305a\"3\"\u304c\u51fa\u529b\u3055\u308c\u308b\u3002\n\n int r1 = table[r0];\n std::cout << r1 << std::endl; // \u6b63\u3057\u304f\u540c\u671f\u5316\u3055\u308c\u3066\u304a\u308a\u3001\u5fc5\u305a\"5\"\u304c\u51fa\u529b\u3055\u308c\u308b\u3002\n\n int r2 = table[r1];\n std::cout << r2 << std::endl; // \u6b63\u3057\u304f\u540c\u671f\u5316\u3055\u308c\u3066\u304a\u308a\u3001\u5fc5\u305a\"-1\"\u304c\u51fa\u529b\u3055\u308c\u308b\u3002\n\n int r3 = table[std::kill_dependency(r1)]; // data race. \u672a\u5b9a\u7fa9\u52d5\u4f5c\u3002\n std::cout << r3 << std::endl; // \u6700\u9069\u5316\u306a\u3069\u306e\u7d50\u679c\u3001\"-1\"\u4ee5\u5916\u304c\u51fa\u529b\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3002\n\n\n t1.join();\n}\n"}], "page_id": ["reference", "atomic", "kill_dependency"]}"> |
72 | 72 | <nav class="navbar navbar-default" role="navigation">
|
73 | 73 | <div class="container-fluid">
|
74 | 74 | <div class="navbar-header">
|
|
188 | 188 |
|
189 | 189 | <p class="text-right"><small>
|
190 | 190 | 最終更新日時(UTC):
|
191 |
| - <span itemprop="datePublished" content="2024-12-23T07:58:47"> |
192 |
| - 2024年12月23日 07時58分47秒 |
| 191 | + <span itemprop="datePublished" content="2025-04-03T04:51:18"> |
| 192 | + 2025年04月03日 04時51分18秒 |
193 | 193 | </span>
|
194 | 194 | <br/>
|
195 | 195 | <span itemprop="author" itemscope itemtype="http://schema.org/Person">
|
196 |
| - <span itemprop="name">Akira Takahashi</span> |
| 196 | + <span itemprop="name">yoh</span> |
197 | 197 | </span>
|
198 | 198 | が更新
|
199 | 199 | </small></p>
|
|
212 | 212 | <div class="row">
|
213 | 213 | <div class="col-sm-12 content-body">
|
214 | 214 |
|
215 |
| - <div class="identifier-type">function template</div><div class="header"><atomic></div><h1 itemprop="name"><span class="namespace" title="namespace std">std::</span><span class="token">kill_dependency</span><span class="cpp cpp11" title="C++11で追加">(C++11)</span></h1> |
| 215 | + <div class="identifier-type">function template</div><div class="header"><atomic></div><h1 itemprop="name"><span class="namespace" title="namespace std">std::</span><span class="token">kill_dependency</span><span class="cpp cpp11" title="C++11で追加">(C++11)</span><span class="cpp cpp26deprecated text-warning" title="C++26で非推奨">(C++26で非推奨)</span></h1> |
216 | 216 | <div itemprop="articleBody"><p><div class="codehilite"><pre><span></span><code><span class="k">namespace</span> <span class="n">std</span> <span class="p">{</span>
|
217 | 217 | <span class="k">template</span> <span class="o"><</span><span class="k">class</span> <span class="nc">T</span><span class="o">></span>
|
218 | 218 | <span class="n">T</span> <span class="n">kill_dependency</span><span class="p">(</span><span class="n">T</span> <span class="n">y</span><span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span> <span class="c1">// (1) C++11</span>
|
219 | 219 | <span class="k">template</span> <span class="o"><</span><span class="k">class</span> <span class="nc">T</span><span class="o">></span>
|
220 |
| - <span class="k">constexpr</span> <span class="n">T</span> <span class="n">kill_dependency</span><span class="p">(</span><span class="n">T</span> <span class="n">y</span><span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span> <span class="c1">// (1) C++26</span> |
| 220 | + <span class="k">constexpr</span> <span class="n">T</span> <span class="n">kill_dependency</span><span class="p">(</span><span class="n">T</span> <span class="n">y</span><span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span> <span class="c1">// (1) C++26(非推奨)</span> |
221 | 221 | <span class="p">}</span>
|
222 | 222 | </code></pre></div>
|
223 | 223 | </p>
|
| 224 | +<p>この関数は、C++26で非推奨となった。</p> |
| 225 | +<p><code><a href="memory_order.html">memory_order_consume</a></code>順序付けを実装したC++処理系は存在せず、本関数の代替機能も提供されない。</p> |
224 | 226 | <h2>概要</h2>
|
225 | 227 | <p>データ依存性を切る。</p>
|
226 | 228 | <h2>効果</h2>
|
@@ -316,6 +318,10 @@ <h2>参照</h2>
|
316 | 318 | <li>C++26で<code>constexpr</code>に対応した</li>
|
317 | 319 | </ul>
|
318 | 320 | </li>
|
| 321 | +<li><a href="https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3475r2.pdf" target="_blank">P3475R2 Defang and deprecate memory_order::consume</a><ul> |
| 322 | +<li>C++26で<code>memory_order::consume</code>とあわせて<code>kill_dependency</code>関数を非推奨化。</li> |
| 323 | +</ul> |
| 324 | +</li> |
319 | 325 | </ul></div>
|
320 | 326 |
|
321 | 327 | </div>
|
|
0 commit comments