68
68
69
69
</ head >
70
70
< body >
71
- < header data-kunai-mdinfo ="{"meta": {"header": ["mutex"], "namespace": ["std"], "id-type": ["class template"], "cpp": ["cpp11"]}, "sources": [{"id": "20b0169d99cb3a6fe1e0e93b2f43b9914c05bb9e", "source": "#include <iostream>\n#include <thread>\n#include <mutex>\n#include <vector>\n\n// std::cout\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u6392\u4ed6\u7684\u306b\u3059\u308b\nstd::mutex print_mtx_;\nvoid safe_print(int x)\n{\n std::lock_guard<std::mutex> lock(print_mtx_);\n std::cout << x << std::endl;\n}\n\nclass X {\n std::mutex mtx_;\n std::vector<int> data_;\npublic:\n // vector\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u6392\u4ed6\u7684\u306b\u3059\u308b\n void add_value(int value)\n {\n std::lock_guard<std::mutex> lock(mtx_); // \u30ed\u30c3\u30af\u3092\u53d6\u5f97\u3059\u308b(lock_guard\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf)\n data_.push_back(value);\n } // \u30ed\u30c3\u30af\u3092\u624b\u653e\u3059(lock_guard\u306e\u30c7\u30b9\u30c8\u30e9\u30af\u30bf)\n\n void print()\n {\n std::lock_guard<std::mutex> lock(mtx_);\n for (int x : data_) {\n safe_print(x);\n }\n }\n};\n\nint main()\n{\n X x;\n\n std::thread t1([&x]{ x.add_value(1); });\n std::thread t2([&x]{ x.add_value(2); });\n\n t1.join();\n t2.join();\n\n x.print();\n}\n"}], "page_id": ["reference", "mutex", "lock_guard"]} ">
71
+ < header data-kunai-mdinfo ="{"meta": {"header": ["mutex"], "namespace": ["std"], "id-type": ["class template"], "cpp": ["cpp11"]}, "sources": [{"id": "c17a48370b54fcb08a37155fd51b6da277635568", "source": "#include <iostream>\n#include <thread>\n#include <mutex>\n\n// std::cout\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u6392\u4ed6\u7684\u306b\u3059\u308b\nstd::mutex print_mtx_;\nvoid safe_print(int x)\n{\n std::lock_guard<std::mutex> lock{print_mtx_};\n std::cout << \"value:\" << x << std::endl;\n}\n\nint main()\n{\n std::thread t1([]{\n for (int i = 0; i < 5; i++) {\n safe_print(i);\n }\n });\n std::thread t2([]{\n for (int i = 0; i < 5; i++) {\n safe_print(5 + i);\n }\n });\n\n t1.join();\n t2.join();\n}\n"}], "page_id": ["reference", "mutex", "lock_guard"]} ">
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-06-11T13:45:38 ">
192
- 2024年06月11日 13時45分38秒
191
+ < span itemprop ="datePublished " content ="2024-12-21T02:13:56 ">
192
+ 2024年12月21日 02時13分56秒
193
193
</ span >
194
194
< br />
195
195
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
@@ -269,56 +269,48 @@ <h2>メンバ型</h2>
269
269
</ tbody >
270
270
</ table >
271
271
< h2 > 例</ h2 >
272
- < p > < div class ="yata " id ="20b0169d99cb3a6fe1e0e93b2f43b9914c05bb9e "> < 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 >
272
+ < h3 > 基本的な使い方</ h3 >
273
+ < p > < div class ="yata " id ="c17a48370b54fcb08a37155fd51b6da277635568 "> < 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 >
273
274
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../thread.html "> <thread></ a > </ span > < span class ="cp "> </ span >
274
275
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../mutex.html "> <mutex></ a > </ span > < span class ="cp "> </ span >
275
- < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../vector.html "> <vector></ a > </ span > < span class ="cp "> </ span >
276
276
277
277
< span class ="c1 "> // < a href ="../iostream/cout.html "> std::cout</ a > へのアクセスを排他的にする</ span >
278
278
< span class ="n "> < a href ="mutex.html "> std::mutex</ a > </ span > < span class ="n "> print_mtx_</ span > < span class ="p "> ;</ span >
279
279
< span class ="kt "> void</ span > < span class ="nf "> safe_print</ span > < span class ="p "> (</ span > < span class ="kt "> int</ span > < span class ="n "> x</ span > < span class ="p "> )</ span >
280
280
< span class ="p "> {</ span >
281
- < span class ="n "> < span style ="color:#ff0000 "> std::lock_guard</ span > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="mutex.html "> std::mutex</ a > </ span > < span class ="o "> ></ span > < span class ="n "> lock</ span > < span class ="p "> ( </ span > < span class ="n "> print_mtx_</ span > < span class ="p "> ) ;</ span >
282
- < span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="n "> x</ span > < span class ="o "> <<</ span > < span class ="n "> < a href ="../ostream/endl.html "> std::endl</ a > </ span > < span class ="p "> ;</ span >
281
+ < span class ="n "> < span style ="color:#ff0000 "> std::lock_guard</ span > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="mutex.html "> std::mutex</ a > </ span > < span class ="o "> ></ span > < span class ="n "> lock</ span > < span class ="p "> { </ span > < span class ="n "> print_mtx_</ span > < span class ="p "> } ;</ span >
282
+ < span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="s " > "value:" </ span > < span class =" o " > << </ span > < span class =" n "> x</ span > < span class ="o "> <<</ span > < span class ="n "> < a href ="../ostream/endl.html "> std::endl</ a > </ span > < span class ="p "> ;</ span >
283
283
< span class ="p "> }</ span >
284
284
285
- < span class ="k "> class</ span > < span class ="nc "> X</ span > < span class ="p "> {</ span >
286
- < span class ="n "> < a href ="mutex.html "> std::mutex</ a > </ span > < span class ="n "> mtx_</ span > < span class ="p "> ;</ span >
287
- < span class ="n "> < a href ="../vector/vector.html "> std::vector</ a > </ span > < span class ="o "> <</ span > < span class ="kt "> int</ span > < span class ="o "> ></ span > < span class ="n "> data_</ span > < span class ="p "> ;</ span >
288
- < span class ="k "> public</ span > < span class ="o "> :</ span >
289
- < span class ="c1 "> // vectorオブジェクトへのアクセスを排他的にする</ span >
290
- < span class ="kt "> void</ span > < span class ="n "> add_value</ span > < span class ="p "> (</ span > < span class ="kt "> int</ span > < span class ="n "> value</ span > < span class ="p "> )</ span >
291
- < span class ="p "> {</ span >
292
- < span class ="n "> < span style ="color:#ff0000 "> std::lock_guard</ span > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="mutex.html "> std::mutex</ a > </ span > < span class ="o "> ></ span > < span class ="n "> lock</ span > < span class ="p "> (</ span > < span class ="n "> mtx_</ span > < span class ="p "> );</ span > < span class ="c1 "> // ロックを取得する(lock_guardのコンストラクタ)</ span >
293
- < span class ="n "> < a href ="../vector/vector/push_back.html "> data_.push_back</ a > </ span > < span class ="p "> (</ span > < span class ="n "> value</ span > < span class ="p "> );</ span >
294
- < span class ="p "> }</ span > < span class ="c1 "> // ロックを手放す(lock_guardのデストラクタ)</ span >
295
-
296
- < span class ="kt "> void</ span > < span class ="n "> print</ span > < span class ="p "> ()</ span >
297
- < span class ="p "> {</ span >
298
- < span class ="n "> < span style ="color:#ff0000 "> std::lock_guard</ span > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="mutex.html "> std::mutex</ a > </ span > < span class ="o "> ></ span > < span class ="n "> lock</ span > < span class ="p "> (</ span > < span class ="n "> mtx_</ span > < span class ="p "> );</ span >
299
- < span class ="k "> for</ span > < span class ="p "> (</ span > < span class ="kt "> int</ span > < span class ="nl "> x</ span > < span class ="p "> :</ span > < span class ="n "> data_</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
300
- < span class ="n "> safe_print</ span > < span class ="p "> (</ span > < span class ="n "> x</ span > < span class ="p "> );</ span >
301
- < span class ="p "> }</ span >
302
- < span class ="p "> }</ span >
303
- < span class ="p "> };</ span >
304
-
305
285
< span class ="kt "> int</ span > < span class ="nf "> main</ span > < span class ="p "> ()</ span >
306
286
< span class ="p "> {</ span >
307
- < span class ="n "> X</ span > < span class ="n "> x</ span > < span class ="p "> ;</ span >
308
-
309
- < span class ="n "> < a href ="../thread/thread.html "> std::thread</ a > </ span > < span class ="n "> t1</ span > < span class ="p "> ([</ span > < span class ="o "> &</ span > < span class ="n "> x</ span > < span class ="p "> ]{</ span > < span class ="n "> x</ span > < span class ="p "> .</ span > < span class ="n "> add_value</ span > < span class ="p "> (</ span > < span class ="mi "> 1</ span > < span class ="p "> );</ span > < span class ="p "> });</ span >
310
- < span class ="n "> < a href ="../thread/thread.html "> std::thread</ a > </ span > < span class ="n "> t2</ span > < span class ="p "> ([</ span > < span class ="o "> &</ span > < span class ="n "> x</ span > < span class ="p "> ]{</ span > < span class ="n "> x</ span > < span class ="p "> .</ span > < span class ="n "> add_value</ span > < span class ="p "> (</ span > < span class ="mi "> 2</ span > < span class ="p "> );</ span > < span class ="p "> });</ span >
287
+ < span class ="n "> < a href ="../thread/thread.html "> std::thread</ a > </ span > < span class ="n "> t1</ span > < span class ="p "> ([]{</ span >
288
+ < span class ="k "> for</ span > < span class ="p "> (</ span > < span class ="kt "> int</ span > < span class ="n "> i</ span > < span class ="o "> =</ span > < span class ="mi "> 0</ span > < span class ="p "> ;</ span > < span class ="n "> i</ span > < span class ="o "> <</ span > < span class ="mi "> 5</ span > < span class ="p "> ;</ span > < span class ="n "> i</ span > < span class ="o "> ++</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
289
+ < span class ="n "> safe_print</ span > < span class ="p "> (</ span > < span class ="n "> i</ span > < span class ="p "> );</ span >
290
+ < span class ="p "> }</ span >
291
+ < span class ="p "> });</ span >
292
+ < span class ="n "> < a href ="../thread/thread.html "> std::thread</ a > </ span > < span class ="n "> t2</ span > < span class ="p "> ([]{</ span >
293
+ < span class ="k "> for</ span > < span class ="p "> (</ span > < span class ="kt "> int</ span > < span class ="n "> i</ span > < span class ="o "> =</ span > < span class ="mi "> 0</ span > < span class ="p "> ;</ span > < span class ="n "> i</ span > < span class ="o "> <</ span > < span class ="mi "> 5</ span > < span class ="p "> ;</ span > < span class ="n "> i</ span > < span class ="o "> ++</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
294
+ < span class ="n "> safe_print</ span > < span class ="p "> (</ span > < span class ="mi "> 5</ span > < span class ="o "> +</ span > < span class ="n "> i</ span > < span class ="p "> );</ span >
295
+ < span class ="p "> }</ span >
296
+ < span class ="p "> });</ span >
311
297
312
298
< span class ="n "> < a href ="../thread/thread/join.html "> t1.join()</ a > </ span > < span class ="p "> ;</ span >
313
299
< span class ="n "> < a href ="../thread/thread/join.html "> t2.join()</ a > </ span > < span class ="p "> ;</ span >
314
-
315
- < span class ="n "> x</ span > < span class ="p "> .</ span > < span class ="n "> print</ span > < span class ="p "> ();</ span >
316
300
< span class ="p "> }</ span >
317
301
</ code > </ pre > </ div >
318
302
</ div > </ p >
319
- < h3 > 出力</ h3 >
320
- < p > < pre > < code > 1
321
- 2
303
+ < h4 > 出力例</ h4 >
304
+ < p > < pre > < code > value:5
305
+ value:6
306
+ value:7
307
+ value:8
308
+ value:9
309
+ value:0
310
+ value:1
311
+ value:2
312
+ value:3
313
+ value:4
322
314
</ code > </ pre > </ p >
323
315
< h2 > バージョン</ h2 >
324
316
< h3 > 言語</ h3 >
@@ -327,14 +319,15 @@ <h3>言語</h3>
327
319
</ ul >
328
320
< h3 > 処理系</ h3 >
329
321
< ul >
330
- < li > < a href ="../../implementation.html#clang "> Clang</ a > : ?? </ li >
322
+ < li > < a href ="../../implementation.html#clang "> Clang</ a > : 14 < span aria-label =" 検証済 " role =" img " title =" 検証済 " > ✅ </ span > </ li >
331
323
< li > < a href ="../../implementation.html#gcc "> GCC</ a > : 4.7.0 < span aria-label ="検証済 " role ="img " title ="検証済 "> ✅</ span > </ li >
332
324
< li > < a href ="../../implementation.html#icc "> ICC</ a > : ??</ li >
333
325
< li > < a href ="../../implementation.html#visual_cpp "> Visual C++</ a > : 2012 < span aria-label ="検証済 " role ="img " title ="検証済 "> ✅</ span > , 2013 < span aria-label ="検証済 " role ="img " title ="検証済 "> ✅</ span > , 2015 < span aria-label ="検証済 " role ="img " title ="検証済 "> ✅</ span > </ li >
334
326
</ ul >
335
327
< h2 > 関連項目</ h2 >
336
328
< ul >
337
329
< li > < code > < a href ="scoped_lock.html "> scoped_lock</ a > </ code > </ li >
330
+ < li > < a href ="../../lang/cpp26/nice_placeholder_with_no_name.html "> C++26 宣言のみで使用しない変数の名前として_をサポート</ a > </ li >
338
331
</ ul > </ div >
339
332
340
333
</ div >
0 commit comments