[{"data":1,"prerenderedAt":1618},["ShallowReactive",2],{"wiki-page-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard":3,"wiki-doc-items-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard":1197,"language-switcher-data-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard":1602,"wiki-i18n-paths-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard":1617},{"id":4,"title":5,"body":6,"canonicalPath":1179,"chapterDepth":67,"chapterOrder":1180,"date":1181,"description":49,"docI18nKey":1182,"docKey":1183,"docRoot":1184,"docTitle":1185,"extension":1186,"i18nKey":1187,"isBlogPost":1188,"isWikiDoc":86,"isWikiIndex":1188,"layout":1189,"legacyPath":1189,"locale":1190,"localeSlug":1191,"meta":1192,"navigation":86,"path":1179,"seo":1193,"sourcePath":1194,"sourceStem":1187,"stem":1195,"wikiDepth":56,"__hash__":1196},"content\u002F_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard.md","mutex 与 lock_guard",{"type":7,"value":8,"toc":1169},"minimark",[9,14,23,34,38,43,420,427,435,439,442,947,951,957,961,971,977,999,1006,1036,1048,1096,1109,1113,1144,1147,1165],[10,11,13],"h2",{"id":12},"what-problem-does-this-section-solve","What problem does this section solve?",[15,16,17,18,22],"p",{},"When multiple threads modify the same variable simultaneously, ",[19,20,21],"code",{},"++counter"," is not an atomic operation. It typically involves reading, incrementing, and writing back the value. When two threads execute these steps in an interleaved manner, a data race occurs.",[15,24,25,26,29,30,33],{},"The most common approach to protect shared data is to use the ",[19,27,28],{},"std::mutex"," mutex; after locking, only one thread can enter the critical section. ",[19,31,32],{},"std::lock_guard"," is an RAII lock that locks upon construction and automatically unlocks when going out of scope.",[10,35,37],{"id":36},"example-code","Example code",[39,40,42],"h3",{"id":41},"example-1-protecting-a-shared-counter-with-mutex-and-lock_guard","Example 1: Protecting a shared counter with mutex and lock_guard",[44,45,50],"pre",{"className":46,"code":47,"language":48,"meta":49,"style":49},"language-cpp shiki shiki-themes github-light github-dark","#include \u003Ciostream>\n#include \u003Cmutex>\n#include \u003Cthread>\n\nint counter = 0;\n\u002F\u002F 加锁用来保护共享数据，避免多个线程同时修改造成数据竞争。\nstd::mutex counter_mutex;\n\nvoid add_many(int times)\n{\n    for (int i = 0; i \u003C times; ++i)\n    {\n        std::lock_guard\u003Cstd::mutex> lock(counter_mutex);\n        ++counter;\n    }\n}\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    \u002F\u002F 创建子线程，让这部分代码和 main 线程并发运行。\n    std::thread t1(add_many, 100000);\n    std::thread t2(add_many, 100000);\n\n    \u002F\u002F join 会等待子线程结束，避免 main 提前退出。\n    t1.join();\n    t2.join();\n\n    std::cout \u003C\u003C \"counter = \" \u003C\u003C counter \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"expected = 200000\\n\";\n\n    return 0;\n}\n","cpp","",[19,51,52,65,73,81,88,108,115,125,130,151,157,190,196,221,230,236,242,247,258,263,269,275,296,312,317,323,335,345,350,382,400,405,415],{"__ignoreMap":49},[53,54,57,61],"span",{"class":55,"line":56},"line",1,[53,58,60],{"class":59},"szBVR","#include",[53,62,64],{"class":63},"sZZnC"," \u003Ciostream>\n",[53,66,68,70],{"class":55,"line":67},2,[53,69,60],{"class":59},[53,71,72],{"class":63}," \u003Cmutex>\n",[53,74,76,78],{"class":55,"line":75},3,[53,77,60],{"class":59},[53,79,80],{"class":63}," \u003Cthread>\n",[53,82,84],{"class":55,"line":83},4,[53,85,87],{"emptyLinePlaceholder":86},true,"\n",[53,89,91,94,98,101,105],{"class":55,"line":90},5,[53,92,93],{"class":59},"int",[53,95,97],{"class":96},"sVt8B"," counter ",[53,99,100],{"class":59},"=",[53,102,104],{"class":103},"sj4cs"," 0",[53,106,107],{"class":96},";\n",[53,109,111],{"class":55,"line":110},6,[53,112,114],{"class":113},"sJ8bj","\u002F\u002F 加锁用来保护共享数据，避免多个线程同时修改造成数据竞争。\n",[53,116,118,122],{"class":55,"line":117},7,[53,119,121],{"class":120},"sScJk","std",[53,123,124],{"class":96},"::mutex counter_mutex;\n",[53,126,128],{"class":55,"line":127},8,[53,129,87],{"emptyLinePlaceholder":86},[53,131,133,136,139,142,144,148],{"class":55,"line":132},9,[53,134,135],{"class":59},"void",[53,137,138],{"class":120}," add_many",[53,140,141],{"class":96},"(",[53,143,93],{"class":59},[53,145,147],{"class":146},"s4XuR"," times",[53,149,150],{"class":96},")\n",[53,152,154],{"class":55,"line":153},10,[53,155,156],{"class":96},"{\n",[53,158,160,163,166,168,171,173,175,178,181,184,187],{"class":55,"line":159},11,[53,161,162],{"class":59},"    for",[53,164,165],{"class":96}," (",[53,167,93],{"class":59},[53,169,170],{"class":96}," i ",[53,172,100],{"class":59},[53,174,104],{"class":103},[53,176,177],{"class":96},"; i ",[53,179,180],{"class":59},"\u003C",[53,182,183],{"class":96}," times; ",[53,185,186],{"class":59},"++",[53,188,189],{"class":96},"i)\n",[53,191,193],{"class":55,"line":192},12,[53,194,195],{"class":96},"    {\n",[53,197,199,202,205,207,209,212,215,218],{"class":55,"line":198},13,[53,200,201],{"class":120},"        std",[53,203,204],{"class":96},"::lock_guard",[53,206,180],{"class":59},[53,208,121],{"class":120},[53,210,211],{"class":96},"::mutex",[53,213,214],{"class":59},">",[53,216,217],{"class":120}," lock",[53,219,220],{"class":96},"(counter_mutex);\n",[53,222,224,227],{"class":55,"line":223},14,[53,225,226],{"class":59},"        ++",[53,228,229],{"class":96},"counter;\n",[53,231,233],{"class":55,"line":232},15,[53,234,235],{"class":96},"    }\n",[53,237,239],{"class":55,"line":238},16,[53,240,241],{"class":96},"}\n",[53,243,245],{"class":55,"line":244},17,[53,246,87],{"emptyLinePlaceholder":86},[53,248,250,252,255],{"class":55,"line":249},18,[53,251,93],{"class":59},[53,253,254],{"class":120}," main",[53,256,257],{"class":96},"()\n",[53,259,261],{"class":55,"line":260},19,[53,262,156],{"class":96},[53,264,266],{"class":55,"line":265},20,[53,267,268],{"class":113},"    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n",[53,270,272],{"class":55,"line":271},21,[53,273,274],{"class":113},"    \u002F\u002F 创建子线程，让这部分代码和 main 线程并发运行。\n",[53,276,278,281,284,287,290,293],{"class":55,"line":277},22,[53,279,280],{"class":120},"    std",[53,282,283],{"class":96},"::thread ",[53,285,286],{"class":120},"t1",[53,288,289],{"class":96},"(add_many, ",[53,291,292],{"class":103},"100000",[53,294,295],{"class":96},");\n",[53,297,299,301,303,306,308,310],{"class":55,"line":298},23,[53,300,280],{"class":120},[53,302,283],{"class":96},[53,304,305],{"class":120},"t2",[53,307,289],{"class":96},[53,309,292],{"class":103},[53,311,295],{"class":96},[53,313,315],{"class":55,"line":314},24,[53,316,87],{"emptyLinePlaceholder":86},[53,318,320],{"class":55,"line":319},25,[53,321,322],{"class":113},"    \u002F\u002F join 会等待子线程结束，避免 main 提前退出。\n",[53,324,326,329,332],{"class":55,"line":325},26,[53,327,328],{"class":96},"    t1.",[53,330,331],{"class":120},"join",[53,333,334],{"class":96},"();\n",[53,336,338,341,343],{"class":55,"line":337},27,[53,339,340],{"class":96},"    t2.",[53,342,331],{"class":120},[53,344,334],{"class":96},[53,346,348],{"class":55,"line":347},28,[53,349,87],{"emptyLinePlaceholder":86},[53,351,353,355,358,361,364,367,369,371,374,377,380],{"class":55,"line":352},29,[53,354,280],{"class":120},[53,356,357],{"class":96},"::cout ",[53,359,360],{"class":59},"\u003C\u003C",[53,362,363],{"class":63}," \"counter = \"",[53,365,366],{"class":59}," \u003C\u003C",[53,368,97],{"class":96},[53,370,360],{"class":59},[53,372,373],{"class":63}," \"",[53,375,376],{"class":103},"\\n",[53,378,379],{"class":63},"\"",[53,381,107],{"class":96},[53,383,385,387,389,391,394,396,398],{"class":55,"line":384},30,[53,386,280],{"class":120},[53,388,357],{"class":96},[53,390,360],{"class":59},[53,392,393],{"class":63}," \"expected = 200000",[53,395,376],{"class":103},[53,397,379],{"class":63},[53,399,107],{"class":96},[53,401,403],{"class":55,"line":402},31,[53,404,87],{"emptyLinePlaceholder":86},[53,406,408,411,413],{"class":55,"line":407},32,[53,409,410],{"class":59},"    return",[53,412,104],{"class":103},[53,414,107],{"class":96},[53,416,418],{"class":55,"line":417},33,[53,419,241],{"class":96},[15,421,422,426],{},[423,424,425],"strong",{},"Results","：",[44,428,433],{"className":429,"code":431,"language":432,"meta":49},[430],"language-text","counter = 200000\nexpected = 200000\n","text",[19,434,431],{"__ignoreMap":49},[39,436,438],{"id":437},"example-2-the-scope-of-a-lock-should-be-minimized","Example 2: The scope of a lock should be minimized.",[15,440,441],{},"In this example, the thread prepares data outside of the lock and only acquires it when updating the shared total. This way, another thread doesn't have to wait on unrelated work.",[44,443,445],{"className":46,"code":444,"language":48,"meta":49,"style":49},"#include \u003Ciostream>\n#include \u003Cmutex>\n#include \u003Cthread>\n#include \u003Cvector>\n\nint total = 0;\n\u002F\u002F 加锁用来保护共享数据，避免多个线程同时修改造成数据竞争。\nstd::mutex total_mutex;\n\nint sum_part(const std::vector\u003Cint>& data, int begin, int end)\n{\n    int local_sum = 0;\n    for (int i = begin; i \u003C end; ++i)\n    {\n        local_sum += data[i];\n    }\n    return local_sum;\n}\n\nvoid worker(const std::vector\u003Cint>& data, int begin, int end)\n{\n    int local_sum = sum_part(data, begin, end);\n\n    {\n        std::lock_guard\u003Cstd::mutex> lock(total_mutex);\n        total += local_sum;\n    }\n}\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    std::vector\u003Cint> data = {1, 2, 3, 4, 5, 6};\n\n    \u002F\u002F 创建子线程，让这部分代码和 main 线程并发运行。\n    std::thread t1(worker, std::cref(data), 0, 3);\n    std::thread t2(worker, std::cref(data), 3, 6);\n\n    \u002F\u002F join 会等待子线程结束，避免 main 提前退出。\n    t1.join();\n    t2.join();\n\n    std::cout \u003C\u003C \"total = \" \u003C\u003C total \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[19,446,447,453,459,465,472,476,489,493,500,504,554,558,572,596,600,611,615,622,626,630,671,675,688,692,696,715,724,728,732,736,744,748,752,801,806,811,842,869,874,879,888,897,902,928,933,942],{"__ignoreMap":49},[53,448,449,451],{"class":55,"line":56},[53,450,60],{"class":59},[53,452,64],{"class":63},[53,454,455,457],{"class":55,"line":67},[53,456,60],{"class":59},[53,458,72],{"class":63},[53,460,461,463],{"class":55,"line":75},[53,462,60],{"class":59},[53,464,80],{"class":63},[53,466,467,469],{"class":55,"line":83},[53,468,60],{"class":59},[53,470,471],{"class":63}," \u003Cvector>\n",[53,473,474],{"class":55,"line":90},[53,475,87],{"emptyLinePlaceholder":86},[53,477,478,480,483,485,487],{"class":55,"line":110},[53,479,93],{"class":59},[53,481,482],{"class":96}," total ",[53,484,100],{"class":59},[53,486,104],{"class":103},[53,488,107],{"class":96},[53,490,491],{"class":55,"line":117},[53,492,114],{"class":113},[53,494,495,497],{"class":55,"line":127},[53,496,121],{"class":120},[53,498,499],{"class":96},"::mutex total_mutex;\n",[53,501,502],{"class":55,"line":132},[53,503,87],{"emptyLinePlaceholder":86},[53,505,506,508,511,513,516,519,522,525,527,529,531,534,537,540,542,545,547,549,552],{"class":55,"line":153},[53,507,93],{"class":59},[53,509,510],{"class":120}," sum_part",[53,512,141],{"class":96},[53,514,515],{"class":59},"const",[53,517,518],{"class":120}," std",[53,520,521],{"class":96},"::",[53,523,524],{"class":120},"vector",[53,526,180],{"class":96},[53,528,93],{"class":59},[53,530,214],{"class":96},[53,532,533],{"class":59},"&",[53,535,536],{"class":146}," data",[53,538,539],{"class":96},", ",[53,541,93],{"class":59},[53,543,544],{"class":146}," begin",[53,546,539],{"class":96},[53,548,93],{"class":59},[53,550,551],{"class":146}," end",[53,553,150],{"class":96},[53,555,556],{"class":55,"line":159},[53,557,156],{"class":96},[53,559,560,563,566,568,570],{"class":55,"line":192},[53,561,562],{"class":59},"    int",[53,564,565],{"class":96}," local_sum ",[53,567,100],{"class":59},[53,569,104],{"class":103},[53,571,107],{"class":96},[53,573,574,576,578,580,582,584,587,589,592,594],{"class":55,"line":198},[53,575,162],{"class":59},[53,577,165],{"class":96},[53,579,93],{"class":59},[53,581,170],{"class":96},[53,583,100],{"class":59},[53,585,586],{"class":96}," begin; i ",[53,588,180],{"class":59},[53,590,591],{"class":96}," end; ",[53,593,186],{"class":59},[53,595,189],{"class":96},[53,597,598],{"class":55,"line":223},[53,599,195],{"class":96},[53,601,602,605,608],{"class":55,"line":232},[53,603,604],{"class":96},"        local_sum ",[53,606,607],{"class":59},"+=",[53,609,610],{"class":96}," data[i];\n",[53,612,613],{"class":55,"line":238},[53,614,235],{"class":96},[53,616,617,619],{"class":55,"line":244},[53,618,410],{"class":59},[53,620,621],{"class":96}," local_sum;\n",[53,623,624],{"class":55,"line":249},[53,625,241],{"class":96},[53,627,628],{"class":55,"line":260},[53,629,87],{"emptyLinePlaceholder":86},[53,631,632,634,637,639,641,643,645,647,649,651,653,655,657,659,661,663,665,667,669],{"class":55,"line":265},[53,633,135],{"class":59},[53,635,636],{"class":120}," worker",[53,638,141],{"class":96},[53,640,515],{"class":59},[53,642,518],{"class":120},[53,644,521],{"class":96},[53,646,524],{"class":120},[53,648,180],{"class":96},[53,650,93],{"class":59},[53,652,214],{"class":96},[53,654,533],{"class":59},[53,656,536],{"class":146},[53,658,539],{"class":96},[53,660,93],{"class":59},[53,662,544],{"class":146},[53,664,539],{"class":96},[53,666,93],{"class":59},[53,668,551],{"class":146},[53,670,150],{"class":96},[53,672,673],{"class":55,"line":271},[53,674,156],{"class":96},[53,676,677,679,681,683,685],{"class":55,"line":277},[53,678,562],{"class":59},[53,680,565],{"class":96},[53,682,100],{"class":59},[53,684,510],{"class":120},[53,686,687],{"class":96},"(data, begin, end);\n",[53,689,690],{"class":55,"line":298},[53,691,87],{"emptyLinePlaceholder":86},[53,693,694],{"class":55,"line":314},[53,695,195],{"class":96},[53,697,698,700,702,704,706,708,710,712],{"class":55,"line":319},[53,699,201],{"class":120},[53,701,204],{"class":96},[53,703,180],{"class":59},[53,705,121],{"class":120},[53,707,211],{"class":96},[53,709,214],{"class":59},[53,711,217],{"class":120},[53,713,714],{"class":96},"(total_mutex);\n",[53,716,717,720,722],{"class":55,"line":325},[53,718,719],{"class":96},"        total ",[53,721,607],{"class":59},[53,723,621],{"class":96},[53,725,726],{"class":55,"line":337},[53,727,235],{"class":96},[53,729,730],{"class":55,"line":347},[53,731,241],{"class":96},[53,733,734],{"class":55,"line":352},[53,735,87],{"emptyLinePlaceholder":86},[53,737,738,740,742],{"class":55,"line":384},[53,739,93],{"class":59},[53,741,254],{"class":120},[53,743,257],{"class":96},[53,745,746],{"class":55,"line":402},[53,747,156],{"class":96},[53,749,750],{"class":55,"line":407},[53,751,268],{"class":113},[53,753,754,756,759,762,765,767,770,773,775,778,780,783,785,788,790,793,795,798],{"class":55,"line":417},[53,755,280],{"class":120},[53,757,758],{"class":96},"::vector",[53,760,761],{"class":59},"\u003Cint>",[53,763,764],{"class":96}," data ",[53,766,100],{"class":59},[53,768,769],{"class":96}," {",[53,771,772],{"class":103},"1",[53,774,539],{"class":96},[53,776,777],{"class":103},"2",[53,779,539],{"class":96},[53,781,782],{"class":103},"3",[53,784,539],{"class":96},[53,786,787],{"class":103},"4",[53,789,539],{"class":96},[53,791,792],{"class":103},"5",[53,794,539],{"class":96},[53,796,797],{"class":103},"6",[53,799,800],{"class":96},"};\n",[53,802,804],{"class":55,"line":803},34,[53,805,87],{"emptyLinePlaceholder":86},[53,807,809],{"class":55,"line":808},35,[53,810,274],{"class":113},[53,812,814,816,818,820,823,825,827,830,833,836,838,840],{"class":55,"line":813},36,[53,815,280],{"class":120},[53,817,283],{"class":96},[53,819,286],{"class":120},[53,821,822],{"class":96},"(worker, ",[53,824,121],{"class":120},[53,826,521],{"class":96},[53,828,829],{"class":120},"cref",[53,831,832],{"class":96},"(data), ",[53,834,835],{"class":103},"0",[53,837,539],{"class":96},[53,839,782],{"class":103},[53,841,295],{"class":96},[53,843,845,847,849,851,853,855,857,859,861,863,865,867],{"class":55,"line":844},37,[53,846,280],{"class":120},[53,848,283],{"class":96},[53,850,305],{"class":120},[53,852,822],{"class":96},[53,854,121],{"class":120},[53,856,521],{"class":96},[53,858,829],{"class":120},[53,860,832],{"class":96},[53,862,782],{"class":103},[53,864,539],{"class":96},[53,866,797],{"class":103},[53,868,295],{"class":96},[53,870,872],{"class":55,"line":871},38,[53,873,87],{"emptyLinePlaceholder":86},[53,875,877],{"class":55,"line":876},39,[53,878,322],{"class":113},[53,880,882,884,886],{"class":55,"line":881},40,[53,883,328],{"class":96},[53,885,331],{"class":120},[53,887,334],{"class":96},[53,889,891,893,895],{"class":55,"line":890},41,[53,892,340],{"class":96},[53,894,331],{"class":120},[53,896,334],{"class":96},[53,898,900],{"class":55,"line":899},42,[53,901,87],{"emptyLinePlaceholder":86},[53,903,905,907,909,911,914,916,918,920,922,924,926],{"class":55,"line":904},43,[53,906,280],{"class":120},[53,908,357],{"class":96},[53,910,360],{"class":59},[53,912,913],{"class":63}," \"total = \"",[53,915,366],{"class":59},[53,917,482],{"class":96},[53,919,360],{"class":59},[53,921,373],{"class":63},[53,923,376],{"class":103},[53,925,379],{"class":63},[53,927,107],{"class":96},[53,929,931],{"class":55,"line":930},44,[53,932,87],{"emptyLinePlaceholder":86},[53,934,936,938,940],{"class":55,"line":935},45,[53,937,410],{"class":59},[53,939,104],{"class":103},[53,941,107],{"class":96},[53,943,945],{"class":55,"line":944},46,[53,946,241],{"class":96},[15,948,949,426],{},[423,950,425],{},[44,952,955],{"className":953,"code":954,"language":432,"meta":49},[430],"total = 21\n",[19,956,954],{"__ignoreMap":49},[10,958,960],{"id":959},"the-distinction-between-lock_guard-and-unique_lock","The distinction between lock_guard and unique_lock",[15,962,963,966,967,970],{},[19,964,965],{},"lock_guard"," and ",[19,968,969],{},"unique_lock"," are both RAII (Resource Acquisition Is Initialization) wrappers for mutexes in C++, but they differ significantly in functionality:",[15,972,973],{},[423,974,975],{},[19,976,32],{},[978,979,980,984,987,990,993,996],"ul",{},[981,982,983],"li",{},"Provides the simplest form of mutex ownership.",[981,985,986],{},"Acquires the mutex on construction and releases it on destruction.",[981,988,989],{},"Cannot be unlocked manually before the guard goes out of scope.",[981,991,992],{},"Cannot be locked or unlocked again after initial acquisition.",[981,994,995],{},"Has virtually no overhead, making it very efficient.",[981,997,998],{},"Ideal for straightforward, scope-based locking patterns.",[15,1000,1001],{},[423,1002,1003],{},[19,1004,1005],{},"std::unique_lock",[978,1007,1008,1011,1014,1017,1020,1030,1033],{},[981,1009,1010],{},"A more flexible and feature-rich locking mechanism.",[981,1012,1013],{},"Supports manual lock and unlock operations at any time.",[981,1015,1016],{},"Can be \"deferred\" or \"try-locked\" during construction.",[981,1018,1019],{},"Can be transferred between threads (moveable but not copyable).",[981,1021,1022,1023,1026,1027,1029],{},"Supports features like ",[19,1024,1025],{},"std::condition_variable"," (which requires ",[19,1028,969],{},").",[981,1031,1032],{},"Involves slightly more overhead due to its additional bookkeeping.",[981,1034,1035],{},"Useful when you need to manipulate the lock's state or use it with condition variables.",[15,1037,1038,1041,1042,1044,1045,1047],{},[423,1039,1040],{},"Summary","\nUse ",[19,1043,965],{}," for basic, deterministic locking. Use ",[19,1046,969],{}," when you need more control over the locking mechanism, such as locking\u002Funlocking manually or working with condition variables.",[1049,1050,1051,1068],"table",{},[1052,1053,1054],"thead",{},[1055,1056,1057,1062,1065],"tr",{},[1058,1059,1061],"th",{"align":1060},"left","lock type",[1058,1063,1064],{"align":1060},"Features",[1058,1066,1067],{"align":1060},"Common uses",[1069,1070,1071,1084],"tbody",{},[1055,1072,1073,1078,1081],{},[1074,1075,1076],"td",{"align":1060},[19,1077,32],{},[1074,1079,1080],{"align":1060},"Simple, construction locks, destruction unlocks, manual unlocking is not permitted.",[1074,1082,1083],{"align":1060},"Protect a small segment of shared data access.",[1055,1085,1086,1090,1093],{},[1074,1087,1088],{"align":1060},[19,1089,1005],{},[1074,1091,1092],{"align":1060},"Delayed locking, manual unlocking, ownership transfer",[1074,1094,1095],{"align":1060},"Conditions and scenarios where locks need to be released early",[15,1097,1098,1099,1101,1102,1104,1105,1108],{},"When starting out, prioritize using ",[19,1100,965],{},". Only use ",[19,1103,969],{}," when you need to work with ",[19,1106,1107],{},"condition_variable"," or require more flexible control over locking.",[10,1110,1112],{"id":1111},"common-errors","Common Errors",[1114,1115,1116,1127,1138,1141],"ol",{},[981,1117,1118,1119,1122,1123,1126],{},"Multiple threads are concurrently modifying shared data without using ",[19,1120,1121],{},"mutex"," or ",[19,1124,1125],{},"atomic"," for protection.",[981,1128,1129,1130,1133,1134,1137],{},"After manually handling ",[19,1131,1132],{},"lock()",", if you forget to ",[19,1135,1136],{},"unlock()",", or encounter an error midway that prevents unlocking.",[981,1139,1140],{},"Avoid performing time-consuming operations while holding a lock, such as sleeping, making network requests, or performing file I\u002FO. These actions can lead to unnecessary delays and reduced system performance, as other threads or processes may be blocked from acquiring the lock and proceeding. Instead, release the lock before executing such operations, or use asynchronous alternatives to ensure efficient resource utilization.",[981,1142,1143],{},"The scope of lock protection is too narrow, missing locks on some paths that read or write shared data.",[10,1145,1040],{"id":1146},"summary",[978,1148,1149,1152,1157,1162],{},[981,1150,1151],{},"Shared data requires synchronization protection.",[981,1153,1154,1156],{},[19,1155,28],{}," provides mutex access.",[981,1158,1159,1161],{},[19,1160,32],{}," is an RAII lock, locking on construction and unlocking on destruction.",[981,1163,1164],{},"The smaller the lock scope, the better, but it must fully cover all shared data access.",[1166,1167,1168],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":49,"searchDepth":67,"depth":67,"links":1170},[1171,1172,1176,1177,1178],{"id":12,"depth":67,"text":13},{"id":36,"depth":67,"text":37,"children":1173},[1174,1175],{"id":41,"depth":75,"text":42},{"id":437,"depth":75,"text":438},{"id":959,"depth":67,"text":960},{"id":1111,"depth":67,"text":1112},{"id":1146,"depth":67,"text":1040},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","2000-1900-0200","2023-10-05","wiki\u002F2023-10-05-cplusplus-jiao-xue","en-us:2023-10-05-cplusplus-jiao-xue","\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard",false,null,"en-US","en-us",{},{"title":5,"description":49},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","nOt-bqhBm8WZVl_pE9rfT-K0ocmtjKBceiMHBvhM8rk",[1198,1204,1209,1214,1219,1224,1229,1234,1239,1244,1249,1254,1259,1264,1269,1274,1279,1284,1289,1294,1299,1304,1309,1314,1319,1324,1329,1334,1339,1344,1349,1354,1359,1364,1369,1374,1379,1384,1389,1394,1399,1404,1409,1414,1419,1424,1429,1434,1439,1444,1449,1454,1459,1464,1469,1474,1479,1480,1485,1489,1494,1499,1504,1509,1514,1519,1524,1529,1534,1539,1544,1549,1554,1559,1564,1569,1574,1579,1584,1589,1594,1599],{"path":1199,"stem":1200,"title":1201,"date":1181,"chapterOrder":1202,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++ Development Environment Setup and Testing","0100",0,{"path":1205,"stem":1206,"title":1207,"date":1181,"chapterOrder":1208,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++ Basics","0200",{"path":1210,"stem":1211,"title":1212,"date":1181,"chapterOrder":1213,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","Data Types and Data Storage","0300",{"path":1215,"stem":1216,"title":1217,"date":1181,"chapterOrder":1218,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","Input and Output","0400",{"path":1220,"stem":1221,"title":1222,"date":1181,"chapterOrder":1223,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","operator","0500",{"path":1225,"stem":1226,"title":1227,"date":1181,"chapterOrder":1228,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","program flow structure","0600",{"path":1230,"stem":1231,"title":1232,"date":1181,"chapterOrder":1233,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","array","0700",{"path":1235,"stem":1236,"title":1237,"date":1181,"chapterOrder":1238,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","Functions and Header Files","0800",{"path":1240,"stem":1241,"title":1242,"date":1181,"chapterOrder":1243,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","pointer","0900",{"path":1245,"stem":1246,"title":1247,"date":1181,"chapterOrder":1248,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","Structures and Unions","1000",{"path":1250,"stem":1251,"title":1252,"date":1181,"chapterOrder":1253,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","Memory Partitioning and Lifecycle","1100",{"path":1255,"stem":1256,"title":1257,"date":1181,"chapterOrder":1258,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","reference","1200",{"path":1260,"stem":1261,"title":1262,"date":1181,"chapterOrder":1263,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","Advanced Functions and Namespaces","1300",{"path":1265,"stem":1266,"title":1267,"date":1181,"chapterOrder":1268,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","encapsulation","1400-0100",{"path":1270,"stem":1271,"title":1272,"date":1181,"chapterOrder":1273,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","Object initialization and cleanup","1400-0200",{"path":1275,"stem":1276,"title":1277,"date":1181,"chapterOrder":1278,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","Object Model and the `this` Pointer","1400-0300",{"path":1280,"stem":1281,"title":1282,"date":1181,"chapterOrder":1283,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","Friends and operator overloading","1400-0400",{"path":1285,"stem":1286,"title":1287,"date":1181,"chapterOrder":1288,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","inheritance","1400-0500",{"path":1290,"stem":1291,"title":1292,"date":1181,"chapterOrder":1293,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","polymorphism","1400-0600",{"path":1295,"stem":1296,"title":1297,"date":1181,"chapterOrder":1298,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","Classes and Objects","1400",{"path":1300,"stem":1301,"title":1302,"date":1181,"chapterOrder":1303,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","File operations","1500",{"path":1305,"stem":1306,"title":1307,"date":1181,"chapterOrder":1308,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理","1600",{"path":1310,"stem":1311,"title":1312,"date":1181,"chapterOrder":1313,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","template","1700",{"path":1315,"stem":1316,"title":1317,"date":1181,"chapterOrder":1318,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","Introduction to STL","1800-0100",{"path":1320,"stem":1321,"title":1322,"date":1181,"chapterOrder":1323,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":1325,"stem":1326,"title":1327,"date":1181,"chapterOrder":1328,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string container","1800-0300",{"path":1330,"stem":1331,"title":1332,"date":1181,"chapterOrder":1333,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":1335,"stem":1336,"title":1337,"date":1181,"chapterOrder":1338,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":1340,"stem":1341,"title":1342,"date":1181,"chapterOrder":1343,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":1345,"stem":1346,"title":1347,"date":1181,"chapterOrder":1348,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue container","1800-0700",{"path":1350,"stem":1351,"title":1352,"date":1181,"chapterOrder":1353,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":1355,"stem":1356,"title":1357,"date":1181,"chapterOrder":1358,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":1360,"stem":1361,"title":1362,"date":1181,"chapterOrder":1363,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":1365,"stem":1366,"title":1367,"date":1181,"chapterOrder":1368,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","Function objects and predicates","1800-1100",{"path":1370,"stem":1371,"title":1372,"date":1181,"chapterOrder":1373,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","Common algorithms","1800-1200",{"path":1375,"stem":1376,"title":1377,"date":1181,"chapterOrder":1378,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","Level up your programming with STL.","1800",{"path":1380,"stem":1381,"title":1382,"date":1181,"chapterOrder":1383,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++ Type Casting","1900",{"path":1385,"stem":1386,"title":1387,"date":1181,"chapterOrder":1388,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","auto","2000-0100",{"path":1390,"stem":1391,"title":1392,"date":1181,"chapterOrder":1393,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":1395,"stem":1396,"title":1397,"date":1181,"chapterOrder":1398,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":1400,"stem":1401,"title":1402,"date":1181,"chapterOrder":1403,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":1405,"stem":1406,"title":1407,"date":1181,"chapterOrder":1408,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","range-based for loop","2000-0500",{"path":1410,"stem":1411,"title":1412,"date":1181,"chapterOrder":1413,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","structured binding","2000-0600",{"path":1415,"stem":1416,"title":1417,"date":1181,"chapterOrder":1418,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":1420,"stem":1421,"title":1422,"date":1181,"chapterOrder":1423,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":1425,"stem":1426,"title":1427,"date":1181,"chapterOrder":1428,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","Smart pointer","2000-0900",{"path":1430,"stem":1431,"title":1432,"date":1181,"chapterOrder":1433,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","Rvalue references and move semantics","2000-1000",{"path":1435,"stem":1436,"title":1437,"date":1181,"chapterOrder":1438,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda expression","2000-1100",{"path":1440,"stem":1441,"title":1442,"date":1181,"chapterOrder":1443,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":1445,"stem":1446,"title":1447,"date":1181,"chapterOrder":1448,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":1450,"stem":1451,"title":1452,"date":1181,"chapterOrder":1453,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":1455,"stem":1456,"title":1457,"date":1181,"chapterOrder":1458,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":1460,"stem":1461,"title":1462,"date":1181,"chapterOrder":1463,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":1465,"stem":1466,"title":1467,"date":1181,"chapterOrder":1468,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":1470,"stem":1471,"title":1472,"date":1181,"chapterOrder":1473,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":1475,"stem":1476,"title":1477,"date":1181,"chapterOrder":1478,"chapterDepth":67,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread and join","2000-1900-0100",{"path":1179,"stem":1195,"title":5,"date":1181,"chapterOrder":1180,"chapterDepth":67,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},{"path":1481,"stem":1482,"title":1483,"date":1181,"chapterOrder":1484,"chapterDepth":67,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":1486,"stem":1487,"title":1107,"date":1181,"chapterOrder":1488,"chapterDepth":67,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","2000-1900-0400",{"path":1490,"stem":1491,"title":1492,"date":1181,"chapterOrder":1493,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","Concurrent programming","2000-1900",{"path":1495,"stem":1496,"title":1497,"date":1181,"chapterOrder":1498,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":1500,"stem":1501,"title":1502,"date":1181,"chapterOrder":1503,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","Modules Introduction","2000-2100",{"path":1505,"stem":1506,"title":1507,"date":1181,"chapterOrder":1508,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","Modern C++","2000",{"path":1510,"stem":1511,"title":1512,"date":1181,"chapterOrder":1513,"chapterDepth":67,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","Timers and Asynchronous I\u002FO","2100-0100-0100",{"path":1515,"stem":1516,"title":1517,"date":1181,"chapterOrder":1518,"chapterDepth":67,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio Basics","2100-0100-0200",{"path":1520,"stem":1521,"title":1522,"date":1181,"chapterOrder":1523,"chapterDepth":67,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","serial communication","2100-0100-0300",{"path":1525,"stem":1526,"title":1527,"date":1181,"chapterOrder":1528,"chapterDepth":67,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP communication","2100-0100-0400",{"path":1530,"stem":1531,"title":1532,"date":1181,"chapterOrder":1533,"chapterDepth":67,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP communication","2100-0100-0500",{"path":1535,"stem":1536,"title":1537,"date":1181,"chapterOrder":1538,"chapterDepth":67,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","Robot Engineering Approach and ROS2 Integration","2100-0100-0600",{"path":1540,"stem":1541,"title":1542,"date":1181,"chapterOrder":1543,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio asynchronous IO library","2100-0100",{"path":1545,"stem":1546,"title":1547,"date":1181,"chapterOrder":1548,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen linear algebra library","2100-0200",{"path":1550,"stem":1551,"title":1552,"date":1181,"chapterOrder":1553,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV Computer Vision Library","2100-0300",{"path":1555,"stem":1556,"title":1557,"date":1181,"chapterOrder":1558,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL Point Cloud Library","2100-0400",{"path":1560,"stem":1561,"title":1562,"date":1181,"chapterOrder":1563,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus Lie group and Lie algebra library","2100-0500",{"path":1565,"stem":1566,"title":1567,"date":1181,"chapterOrder":1568,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","Learning Common Libraries","2100",{"path":1570,"stem":1571,"title":1572,"date":1181,"chapterOrder":1573,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets and Build Installation","2200-0100",{"path":1575,"stem":1576,"title":1577,"date":1181,"chapterOrder":1578,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","Top-level CMake and Public Compilation Options","2200-0200",{"path":1580,"stem":1581,"title":1582,"date":1181,"chapterOrder":1583,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","Detailed CMake Explanation for src and lib Modules","2200-0300",{"path":1585,"stem":1586,"title":1587,"date":1181,"chapterOrder":1588,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","How to write third-party library dependencies","2200-0400",{"path":1590,"stem":1591,"title":1592,"date":1181,"chapterOrder":1593,"chapterDepth":56,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","Template Extensions and FAQ","2200-0500",{"path":1595,"stem":1596,"title":1597,"date":1181,"chapterOrder":1598,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":1188},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake Project Template","2200",{"path":1184,"stem":1600,"title":1601,"date":1181,"chapterOrder":1189,"chapterDepth":1203,"docKey":1183,"docRoot":1184,"docTitle":1185,"isWikiDoc":86,"isWikiIndex":86},"_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++ tutorial",{"variants":1603},[1604,1605,1608,1611,1614],{"path":1179,"localeSlug":1191,"i18nKey":1187},{"path":1606,"localeSlug":1607,"i18nKey":1187},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","zh-hant",{"path":1609,"localeSlug":1610,"i18nKey":1187},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","zh-hk",{"path":1612,"localeSlug":1613,"i18nKey":1187},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","zh-tw",{"path":1615,"localeSlug":1616,"i18nKey":1187},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","zh-cn",[1179,1194,1606,1194,1609,1194,1612,1194,1615,1194],1784646869793]