6868
6969 </ head >
7070 < 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"]} ">
7272 < nav class ="navbar navbar-default " role ="navigation ">
7373 < div class ="container-fluid ">
7474 < div class ="navbar-header ">
188188
189189 < p class ="text-right "> < small >
190190 最終更新日時(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秒
193193 </ span >
194194 < br />
195195 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
@@ -269,56 +269,48 @@ <h2>メンバ型</h2>
269269</ tbody >
270270</ table >
271271< 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 >
273274< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../thread.html "> <thread></ a > </ span > < span class ="cp "> </ span >
274275< 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 >
276276
277277< span class ="c1 "> // < a href ="../iostream/cout.html "> std::cout</ a > へのアクセスを排他的にする</ span >
278278< span class ="n "> < a href ="mutex.html "> std::mutex</ a > </ span > < span class ="n "> print_mtx_</ span > < span class ="p "> ;</ span >
279279< 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 >
280280< 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 >
283283< span class ="p "> }</ span >
284284
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-
305285< span class ="kt "> int</ span > < span class ="nf "> main</ span > < span class ="p "> ()</ span >
306286< 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 >
311297
312298 < span class ="n "> < a href ="../thread/thread/join.html "> t1.join()</ a > </ span > < span class ="p "> ;</ span >
313299 < 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 >
316300< span class ="p "> }</ span >
317301</ code > </ pre > </ div >
318302</ 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
322314</ code > </ pre > </ p >
323315< h2 > バージョン</ h2 >
324316< h3 > 言語</ h3 >
@@ -327,14 +319,15 @@ <h3>言語</h3>
327319</ ul >
328320< h3 > 処理系</ h3 >
329321< 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 >
331323< li > < a href ="../../implementation.html#gcc "> GCC</ a > : 4.7.0 < span aria-label ="検証済 " role ="img " title ="検証済 "> ✅</ span > </ li >
332324< li > < a href ="../../implementation.html#icc "> ICC</ a > : ??</ li >
333325< 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 >
334326</ ul >
335327< h2 > 関連項目</ h2 >
336328< ul >
337329< 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 >
338331</ ul > </ div >
339332
340333 </ div >
0 commit comments