68
68
69
69
</ head >
70
70
< body >
71
- < header data-kunai-mdinfo ="{"meta": {"header": ["execution"], "namespace": ["std::execution"], "id-type": ["class"], "cpp": ["cpp17"]}, "sources": [{"id": "472d7f1872b818bcb98d05694e11c93bc046a0ba", "source": "#include <iostream>\n#include <algorithm>\n#include <execution>\n#include <vector>\n\nint main()\n{\n std::vector<int> v = {3, 1, 4, 5, 2, 6};\n\n // \u3053\u308c\u307e\u3067\u901a\u308a\u306e\u9010\u6b21\u5b9f\u884c\n std::sort(v.begin(), v.end());\n std::sort(std::execution::seq, v.begin(), v.end());\n\n // \u4e26\u5217\u5b9f\u884c\n std::sort(std::execution::par, v.begin(), v.end());\n\n // \u4e26\u5217\u5316\u30fb\u30d9\u30af\u30c8\u30eb\u5316\n std::sort(std::execution::par_unseq, v.begin(), v.end());\n\n // \u30d9\u30af\u30c8\u30eb\u5316\n std::sort(std::execution::unseq, v.begin(), v.end());\n\n for (int x : v) {\n std::cout << x << std::endl;\n }\n}\n"}, {"id": "1e646621fd2b932133642d72e736ae9b8811031f", "source": "#include <iostream>\n#include <algorithm>\n#include <execution>\n#include <vector>\n#include <mutex>\n\nint main()\n{\n {\n std::vector<int> a = {3, 1, 4, 5, 2, 6};\n std::vector<int> b;\n\n // \u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u5316\u306e\u5834\u5408\u306f\u3001\u30df\u30e5\u30fc\u30c6\u30c3\u30af\u30b9\u304b\u30a2\u30c8\u30df\u30c3\u30af\u64cd\u4f5c\u3067\u30c7\u30fc\u30bf\u7af6\u5408\u3092\u56de\u907f\u3059\u308b\n std::mutex m;\n std::for_each(std::execution::par, a.begin(), b.end(), [&](int x) {\n std::lock_guard lk{m};\n b.push_back(x);\n });\n\n for (int x : b) {\n std::cout << x << ' ';\n }\n std::cout << std::endl;\n }\n\n // (\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u5316 +) \u30d9\u30af\u30c8\u30eb\u5316\u306e\u5834\u5408\u306f\u3001Lock-free\u30a2\u30c8\u30df\u30c3\u30af\u64cd\u4f5c\u3067\u30c7\u30fc\u30bf\u7af6\u5408\u3092\u56de\u907f\u3059\u308b\n {\n static_assert(std::atomic<int>::is_always_lock_free); // Lock-free\u4fdd\u8a3c\u3092\u78ba\u8a8d\n std::vector<int> v = {3, 1, 4, 5, 2};\n std::atomic<int> count {0}; // \u30bf\u30b9\u30af\u304c\u7d42\u4e86\u3057\u305f\u6570\n\n std::for_each(std::execution::par_unseq, v.begin(), v.end(), [&count](int) {\n // ...\u6642\u9593\u306e\u304b\u304b\u308b\u51e6\u7406...\n ++count;\n });\n\n std::cout << count.load() << std::endl;\n }\n}\n"}], "page_id": ["reference", "execution", "execution", "execution_policy"]} ">
71
+ < header data-kunai-mdinfo ="{"meta": {"header": ["execution"], "namespace": ["std::execution"], "id-type": ["class"], "cpp": ["cpp17"]}, "sources": [{"id": "472d7f1872b818bcb98d05694e11c93bc046a0ba", "source": "#include <iostream>\n#include <algorithm>\n#include <execution>\n#include <vector>\n\nint main()\n{\n std::vector<int> v = {3, 1, 4, 5, 2, 6};\n\n // \u3053\u308c\u307e\u3067\u901a\u308a\u306e\u9010\u6b21\u5b9f\u884c\n std::sort(v.begin(), v.end());\n std::sort(std::execution::seq, v.begin(), v.end());\n\n // \u4e26\u5217\u5b9f\u884c\n std::sort(std::execution::par, v.begin(), v.end());\n\n // \u4e26\u5217\u5316\u30fb\u30d9\u30af\u30c8\u30eb\u5316\n std::sort(std::execution::par_unseq, v.begin(), v.end());\n\n // \u30d9\u30af\u30c8\u30eb\u5316\n std::sort(std::execution::unseq, v.begin(), v.end());\n\n for (int x : v) {\n std::cout << x << std::endl;\n }\n}\n"}, {"id": "958d23dfa2ea4c4bff0bb8e80c99aa18086a0619", "source": "#include <iostream>\n#include <algorithm>\n#include <execution>\n#include <vector>\n#include <mutex>\n\nint main()\n{\n {\n std::vector<int> a = {3, 1, 4, 5, 2, 6};\n std::vector<int> b;\n\n // \u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u5316\u306e\u5834\u5408\u306f\u3001\u30df\u30e5\u30fc\u30c6\u30c3\u30af\u30b9\u304b\u30a2\u30c8\u30df\u30c3\u30af\u64cd\u4f5c\u3067\u30c7\u30fc\u30bf\u7af6\u5408\u3092\u56de\u907f\u3059\u308b\n std::mutex m;\n std::for_each(std::execution::par, a.begin(), a.end(), [&](int x) {\n std::lock_guard lk{m};\n b.push_back(x);\n });\n\n for (int x : b) {\n std::cout << x << ' ';\n }\n std::cout << std::endl;\n }\n\n // (\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u5316 +) \u30d9\u30af\u30c8\u30eb\u5316\u306e\u5834\u5408\u306f\u3001Lock-free\u30a2\u30c8\u30df\u30c3\u30af\u64cd\u4f5c\u3067\u30c7\u30fc\u30bf\u7af6\u5408\u3092\u56de\u907f\u3059\u308b\n {\n static_assert(std::atomic<int>::is_always_lock_free); // Lock-free\u4fdd\u8a3c\u3092\u78ba\u8a8d\n std::vector<int> v = {3, 1, 4, 5, 2};\n std::atomic<int> count {0}; // \u30bf\u30b9\u30af\u304c\u7d42\u4e86\u3057\u305f\u6570\n\n std::for_each(std::execution::par_unseq, v.begin(), v.end(), [&count](int) {\n // ...\u6642\u9593\u306e\u304b\u304b\u308b\u51e6\u7406...\n ++count;\n });\n\n std::cout << count.load() << std::endl;\n }\n}\n"}], "page_id": ["reference", "execution", "execution", "execution_policy"]} ">
72
72
< nav class ="navbar navbar-default " role ="navigation ">
73
73
< div class ="container-fluid ">
74
74
< div class ="navbar-header ">
200
200
201
201
< p class ="text-right "> < small >
202
202
最終更新日時(UTC):
203
- < span itemprop ="datePublished " content ="2024-05-12T06:58:52 ">
204
- 2024年05月12日 06時58分52秒
203
+ < span itemprop ="datePublished " content ="2024-07-01T13:15:19 ">
204
+ 2024年07月01日 13時15分19秒
205
205
</ span >
206
206
< br />
207
207
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
@@ -333,7 +333,7 @@ <h4>出力</h4>
333
333
6
334
334
</ code > </ pre > </ p >
335
335
< h3 > データ競合を回避する例</ h3 >
336
- < p > < div class ="yata " id ="1e646621fd2b932133642d72e736ae9b8811031f "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
336
+ < p > < div class ="yata " id ="958d23dfa2ea4c4bff0bb8e80c99aa18086a0619 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
337
337
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../algorithm.html "> <algorithm></ a > </ span > < span class ="cp "> </ span >
338
338
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../execution.html "> <execution></ a > </ span > < span class ="cp "> </ span >
339
339
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../vector.html "> <vector></ a > </ span > < span class ="cp "> </ span >
@@ -347,7 +347,7 @@ <h3>データ競合を回避する例</h3>
347
347
348
348
< span class ="c1 "> // マルチスレッド化の場合は、ミューテックスかアトミック操作でデータ競合を回避する</ span >
349
349
< span class ="n "> < a href ="../../mutex/mutex.html "> std::mutex</ a > </ span > < span class ="n "> m</ span > < span class ="p "> ;</ span >
350
- < span class ="n "> < a href ="../../algorithm/for_each.html "> std::for_each</ a > </ span > < span class ="p "> (</ span > < span class ="n "> < span style ="color:#ff0000 "> std::execution::par</ span > </ span > < span class ="p "> ,</ span > < span class ="n "> a</ span > < span class ="p "> .</ span > < span class ="n "> begin</ span > < span class ="p "> (),</ span > < span class ="n "> b </ span > < span class ="p "> .</ span > < span class ="n "> end</ span > < span class ="p "> (),</ span > < span class ="p "> [</ span > < span class ="o "> &</ span > < span class ="p "> ](</ span > < span class ="kt "> int</ span > < span class ="n "> x</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
350
+ < span class ="n "> < a href ="../../algorithm/for_each.html "> std::for_each</ a > </ span > < span class ="p "> (</ span > < span class ="n "> < span style ="color:#ff0000 "> std::execution::par</ span > </ span > < span class ="p "> ,</ span > < span class ="n "> a</ span > < span class ="p "> .</ span > < span class ="n "> begin</ span > < span class ="p "> (),</ span > < span class ="n "> a </ span > < span class ="p "> .</ span > < span class ="n "> end</ span > < span class ="p "> (),</ span > < span class ="p "> [</ span > < span class ="o "> &</ span > < span class ="p "> ](</ span > < span class ="kt "> int</ span > < span class ="n "> x</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
351
351
< span class ="n "> < a href ="../../mutex/lock_guard.html "> std::lock_guard</ a > </ span > < span class ="n "> lk</ span > < span class ="p "> {</ span > < span class ="n "> m</ span > < span class ="p "> };</ span >
352
352
< span class ="n "> b</ span > < span class ="p "> .</ span > < span class ="n "> push_back</ span > < span class ="p "> (</ span > < span class ="n "> x</ span > < span class ="p "> );</ span >
353
353
< span class ="p "> });</ span >
0 commit comments