[{"data":1,"prerenderedAt":1535},["ShallowReactive",2],{"wiki-page-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-2-mutex-lock-guard":3,"wiki-doc-items-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-2-mutex-lock-guard":1112,"language-switcher-data-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-2-mutex-lock-guard":1519,"wiki-i18n-paths-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-2-mutex-lock-guard":1534},{"id":4,"title":5,"body":6,"canonicalPath":1094,"chapter":1095,"chapterSort":1096,"date":1097,"description":47,"docI18nKey":1098,"docKey":1099,"docRoot":1100,"docTitle":1101,"extension":1102,"i18nKey":1103,"isBlogPost":1104,"isWikiDoc":84,"isWikiIndex":1104,"layout":1105,"legacyPath":1106,"locale":1107,"localeSlug":1108,"meta":1109,"navigation":84,"path":1094,"seo":1110,"sourcePath":1106,"sourceStem":1103,"stem":1103,"wikiDepth":54,"__hash__":1111},"content/wiki/2023-10-05-Cplusplus教学/ch18-19-2-mutex-lock-guard.md","mutex 与 lock_guard",{"type":7,"value":8,"toc":1084},"minimark",[9,13,22,33,36,41,418,425,433,437,440,945,949,955,959,1008,1023,1026,1058,1061,1080],[10,11,12],"h2",{"id":12},"本节解决什么问题",[14,15,16,17,21],"p",{},"多个线程同时修改同一个变量时，",[18,19,20],"code",{},"++counter"," 并不是一个不可分割的动作。它通常包含读取、加一、写回几个步骤。两个线程交错执行时，就会产生数据竞争。",[14,23,24,25,28,29,32],{},"保护共享数据最常见的做法是：用 ",[18,26,27],{},"std::mutex"," 互斥锁，加锁后只有一个线程能进入临界区。",[18,30,31],{},"std::lock_guard"," 是 RAII 锁，构造时加锁，离开作用域时自动解锁。",[10,34,35],{"id":35},"示例代码",[37,38,40],"h3",{"id":39},"示例-1用-mutex-和-lock_guard-保护共享计数器","示例 1：用 mutex 和 lock_guard 保护共享计数器",[42,43,48],"pre",{"className":44,"code":45,"language":46,"meta":47,"style":47},"language-cpp shiki shiki-themes github-light github-dark","#include \u003Ciostream>\n#include \u003Cmutex>\n#include \u003Cthread>\n\nint counter = 0;\n// 加锁用来保护共享数据，避免多个线程同时修改造成数据竞争。\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    // 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    // 创建子线程，让这部分代码和 main 线程并发运行。\n    std::thread t1(add_many, 100000);\n    std::thread t2(add_many, 100000);\n\n    // 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","",[18,49,50,63,71,79,86,106,113,123,128,149,155,188,194,219,228,234,240,245,256,261,267,273,294,310,315,321,333,343,348,380,398,403,413],{"__ignoreMap":47},[51,52,55,59],"span",{"class":53,"line":54},"line",1,[51,56,58],{"class":57},"szBVR","#include",[51,60,62],{"class":61},"sZZnC"," \u003Ciostream>\n",[51,64,66,68],{"class":53,"line":65},2,[51,67,58],{"class":57},[51,69,70],{"class":61}," \u003Cmutex>\n",[51,72,74,76],{"class":53,"line":73},3,[51,75,58],{"class":57},[51,77,78],{"class":61}," \u003Cthread>\n",[51,80,82],{"class":53,"line":81},4,[51,83,85],{"emptyLinePlaceholder":84},true,"\n",[51,87,89,92,96,99,103],{"class":53,"line":88},5,[51,90,91],{"class":57},"int",[51,93,95],{"class":94},"sVt8B"," counter ",[51,97,98],{"class":57},"=",[51,100,102],{"class":101},"sj4cs"," 0",[51,104,105],{"class":94},";\n",[51,107,109],{"class":53,"line":108},6,[51,110,112],{"class":111},"sJ8bj","// 加锁用来保护共享数据，避免多个线程同时修改造成数据竞争。\n",[51,114,116,120],{"class":53,"line":115},7,[51,117,119],{"class":118},"sScJk","std",[51,121,122],{"class":94},"::mutex counter_mutex;\n",[51,124,126],{"class":53,"line":125},8,[51,127,85],{"emptyLinePlaceholder":84},[51,129,131,134,137,140,142,146],{"class":53,"line":130},9,[51,132,133],{"class":57},"void",[51,135,136],{"class":118}," add_many",[51,138,139],{"class":94},"(",[51,141,91],{"class":57},[51,143,145],{"class":144},"s4XuR"," times",[51,147,148],{"class":94},")\n",[51,150,152],{"class":53,"line":151},10,[51,153,154],{"class":94},"{\n",[51,156,158,161,164,166,169,171,173,176,179,182,185],{"class":53,"line":157},11,[51,159,160],{"class":57},"    for",[51,162,163],{"class":94}," (",[51,165,91],{"class":57},[51,167,168],{"class":94}," i ",[51,170,98],{"class":57},[51,172,102],{"class":101},[51,174,175],{"class":94},"; i ",[51,177,178],{"class":57},"\u003C",[51,180,181],{"class":94}," times; ",[51,183,184],{"class":57},"++",[51,186,187],{"class":94},"i)\n",[51,189,191],{"class":53,"line":190},12,[51,192,193],{"class":94},"    {\n",[51,195,197,200,203,205,207,210,213,216],{"class":53,"line":196},13,[51,198,199],{"class":118},"        std",[51,201,202],{"class":94},"::lock_guard",[51,204,178],{"class":57},[51,206,119],{"class":118},[51,208,209],{"class":94},"::mutex",[51,211,212],{"class":57},">",[51,214,215],{"class":118}," lock",[51,217,218],{"class":94},"(counter_mutex);\n",[51,220,222,225],{"class":53,"line":221},14,[51,223,224],{"class":57},"        ++",[51,226,227],{"class":94},"counter;\n",[51,229,231],{"class":53,"line":230},15,[51,232,233],{"class":94},"    }\n",[51,235,237],{"class":53,"line":236},16,[51,238,239],{"class":94},"}\n",[51,241,243],{"class":53,"line":242},17,[51,244,85],{"emptyLinePlaceholder":84},[51,246,248,250,253],{"class":53,"line":247},18,[51,249,91],{"class":57},[51,251,252],{"class":118}," main",[51,254,255],{"class":94},"()\n",[51,257,259],{"class":53,"line":258},19,[51,260,154],{"class":94},[51,262,264],{"class":53,"line":263},20,[51,265,266],{"class":111},"    // 程序从 main 函数开始执行，下面的语句会按顺序运行。\n",[51,268,270],{"class":53,"line":269},21,[51,271,272],{"class":111},"    // 创建子线程，让这部分代码和 main 线程并发运行。\n",[51,274,276,279,282,285,288,291],{"class":53,"line":275},22,[51,277,278],{"class":118},"    std",[51,280,281],{"class":94},"::thread ",[51,283,284],{"class":118},"t1",[51,286,287],{"class":94},"(add_many, ",[51,289,290],{"class":101},"100000",[51,292,293],{"class":94},");\n",[51,295,297,299,301,304,306,308],{"class":53,"line":296},23,[51,298,278],{"class":118},[51,300,281],{"class":94},[51,302,303],{"class":118},"t2",[51,305,287],{"class":94},[51,307,290],{"class":101},[51,309,293],{"class":94},[51,311,313],{"class":53,"line":312},24,[51,314,85],{"emptyLinePlaceholder":84},[51,316,318],{"class":53,"line":317},25,[51,319,320],{"class":111},"    // join 会等待子线程结束，避免 main 提前退出。\n",[51,322,324,327,330],{"class":53,"line":323},26,[51,325,326],{"class":94},"    t1.",[51,328,329],{"class":118},"join",[51,331,332],{"class":94},"();\n",[51,334,336,339,341],{"class":53,"line":335},27,[51,337,338],{"class":94},"    t2.",[51,340,329],{"class":118},[51,342,332],{"class":94},[51,344,346],{"class":53,"line":345},28,[51,347,85],{"emptyLinePlaceholder":84},[51,349,351,353,356,359,362,365,367,369,372,375,378],{"class":53,"line":350},29,[51,352,278],{"class":118},[51,354,355],{"class":94},"::cout ",[51,357,358],{"class":57},"\u003C\u003C",[51,360,361],{"class":61}," \"counter = \"",[51,363,364],{"class":57}," \u003C\u003C",[51,366,95],{"class":94},[51,368,358],{"class":57},[51,370,371],{"class":61}," \"",[51,373,374],{"class":101},"\\n",[51,376,377],{"class":61},"\"",[51,379,105],{"class":94},[51,381,383,385,387,389,392,394,396],{"class":53,"line":382},30,[51,384,278],{"class":118},[51,386,355],{"class":94},[51,388,358],{"class":57},[51,390,391],{"class":61}," \"expected = 200000",[51,393,374],{"class":101},[51,395,377],{"class":61},[51,397,105],{"class":94},[51,399,401],{"class":53,"line":400},31,[51,402,85],{"emptyLinePlaceholder":84},[51,404,406,409,411],{"class":53,"line":405},32,[51,407,408],{"class":57},"    return",[51,410,102],{"class":101},[51,412,105],{"class":94},[51,414,416],{"class":53,"line":415},33,[51,417,239],{"class":94},[14,419,420,424],{},[421,422,423],"strong",{},"运行结果","：",[42,426,431],{"className":427,"code":429,"language":430,"meta":47},[428],"language-text","counter = 200000\nexpected = 200000\n","text",[18,432,429],{"__ignoreMap":47},[37,434,436],{"id":435},"示例-2锁的作用域要尽量小","示例 2：锁的作用域要尽量小",[14,438,439],{},"这个例子里，线程先在锁外准备数据，只有更新共享总数时才加锁。这样另一个线程不用在无关工作上等待。",[42,441,443],{"className":44,"code":442,"language":46,"meta":47,"style":47},"#include \u003Ciostream>\n#include \u003Cmutex>\n#include \u003Cthread>\n#include \u003Cvector>\n\nint total = 0;\n// 加锁用来保护共享数据，避免多个线程同时修改造成数据竞争。\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    // 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    std::vector\u003Cint> data = {1, 2, 3, 4, 5, 6};\n\n    // 创建子线程，让这部分代码和 main 线程并发运行。\n    std::thread t1(worker, std::cref(data), 0, 3);\n    std::thread t2(worker, std::cref(data), 3, 6);\n\n    // 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",[18,444,445,451,457,463,470,474,487,491,498,502,552,556,570,594,598,609,613,620,624,628,669,673,686,690,694,713,722,726,730,734,742,746,750,799,804,809,840,867,872,877,886,895,900,926,931,940],{"__ignoreMap":47},[51,446,447,449],{"class":53,"line":54},[51,448,58],{"class":57},[51,450,62],{"class":61},[51,452,453,455],{"class":53,"line":65},[51,454,58],{"class":57},[51,456,70],{"class":61},[51,458,459,461],{"class":53,"line":73},[51,460,58],{"class":57},[51,462,78],{"class":61},[51,464,465,467],{"class":53,"line":81},[51,466,58],{"class":57},[51,468,469],{"class":61}," \u003Cvector>\n",[51,471,472],{"class":53,"line":88},[51,473,85],{"emptyLinePlaceholder":84},[51,475,476,478,481,483,485],{"class":53,"line":108},[51,477,91],{"class":57},[51,479,480],{"class":94}," total ",[51,482,98],{"class":57},[51,484,102],{"class":101},[51,486,105],{"class":94},[51,488,489],{"class":53,"line":115},[51,490,112],{"class":111},[51,492,493,495],{"class":53,"line":125},[51,494,119],{"class":118},[51,496,497],{"class":94},"::mutex total_mutex;\n",[51,499,500],{"class":53,"line":130},[51,501,85],{"emptyLinePlaceholder":84},[51,503,504,506,509,511,514,517,520,523,525,527,529,532,535,538,540,543,545,547,550],{"class":53,"line":151},[51,505,91],{"class":57},[51,507,508],{"class":118}," sum_part",[51,510,139],{"class":94},[51,512,513],{"class":57},"const",[51,515,516],{"class":118}," std",[51,518,519],{"class":94},"::",[51,521,522],{"class":118},"vector",[51,524,178],{"class":94},[51,526,91],{"class":57},[51,528,212],{"class":94},[51,530,531],{"class":57},"&",[51,533,534],{"class":144}," data",[51,536,537],{"class":94},", ",[51,539,91],{"class":57},[51,541,542],{"class":144}," begin",[51,544,537],{"class":94},[51,546,91],{"class":57},[51,548,549],{"class":144}," end",[51,551,148],{"class":94},[51,553,554],{"class":53,"line":157},[51,555,154],{"class":94},[51,557,558,561,564,566,568],{"class":53,"line":190},[51,559,560],{"class":57},"    int",[51,562,563],{"class":94}," local_sum ",[51,565,98],{"class":57},[51,567,102],{"class":101},[51,569,105],{"class":94},[51,571,572,574,576,578,580,582,585,587,590,592],{"class":53,"line":196},[51,573,160],{"class":57},[51,575,163],{"class":94},[51,577,91],{"class":57},[51,579,168],{"class":94},[51,581,98],{"class":57},[51,583,584],{"class":94}," begin; i ",[51,586,178],{"class":57},[51,588,589],{"class":94}," end; ",[51,591,184],{"class":57},[51,593,187],{"class":94},[51,595,596],{"class":53,"line":221},[51,597,193],{"class":94},[51,599,600,603,606],{"class":53,"line":230},[51,601,602],{"class":94},"        local_sum ",[51,604,605],{"class":57},"+=",[51,607,608],{"class":94}," data[i];\n",[51,610,611],{"class":53,"line":236},[51,612,233],{"class":94},[51,614,615,617],{"class":53,"line":242},[51,616,408],{"class":57},[51,618,619],{"class":94}," local_sum;\n",[51,621,622],{"class":53,"line":247},[51,623,239],{"class":94},[51,625,626],{"class":53,"line":258},[51,627,85],{"emptyLinePlaceholder":84},[51,629,630,632,635,637,639,641,643,645,647,649,651,653,655,657,659,661,663,665,667],{"class":53,"line":263},[51,631,133],{"class":57},[51,633,634],{"class":118}," worker",[51,636,139],{"class":94},[51,638,513],{"class":57},[51,640,516],{"class":118},[51,642,519],{"class":94},[51,644,522],{"class":118},[51,646,178],{"class":94},[51,648,91],{"class":57},[51,650,212],{"class":94},[51,652,531],{"class":57},[51,654,534],{"class":144},[51,656,537],{"class":94},[51,658,91],{"class":57},[51,660,542],{"class":144},[51,662,537],{"class":94},[51,664,91],{"class":57},[51,666,549],{"class":144},[51,668,148],{"class":94},[51,670,671],{"class":53,"line":269},[51,672,154],{"class":94},[51,674,675,677,679,681,683],{"class":53,"line":275},[51,676,560],{"class":57},[51,678,563],{"class":94},[51,680,98],{"class":57},[51,682,508],{"class":118},[51,684,685],{"class":94},"(data, begin, end);\n",[51,687,688],{"class":53,"line":296},[51,689,85],{"emptyLinePlaceholder":84},[51,691,692],{"class":53,"line":312},[51,693,193],{"class":94},[51,695,696,698,700,702,704,706,708,710],{"class":53,"line":317},[51,697,199],{"class":118},[51,699,202],{"class":94},[51,701,178],{"class":57},[51,703,119],{"class":118},[51,705,209],{"class":94},[51,707,212],{"class":57},[51,709,215],{"class":118},[51,711,712],{"class":94},"(total_mutex);\n",[51,714,715,718,720],{"class":53,"line":323},[51,716,717],{"class":94},"        total ",[51,719,605],{"class":57},[51,721,619],{"class":94},[51,723,724],{"class":53,"line":335},[51,725,233],{"class":94},[51,727,728],{"class":53,"line":345},[51,729,239],{"class":94},[51,731,732],{"class":53,"line":350},[51,733,85],{"emptyLinePlaceholder":84},[51,735,736,738,740],{"class":53,"line":382},[51,737,91],{"class":57},[51,739,252],{"class":118},[51,741,255],{"class":94},[51,743,744],{"class":53,"line":400},[51,745,154],{"class":94},[51,747,748],{"class":53,"line":405},[51,749,266],{"class":111},[51,751,752,754,757,760,763,765,768,771,773,776,778,781,783,786,788,791,793,796],{"class":53,"line":415},[51,753,278],{"class":118},[51,755,756],{"class":94},"::vector",[51,758,759],{"class":57},"\u003Cint>",[51,761,762],{"class":94}," data ",[51,764,98],{"class":57},[51,766,767],{"class":94}," {",[51,769,770],{"class":101},"1",[51,772,537],{"class":94},[51,774,775],{"class":101},"2",[51,777,537],{"class":94},[51,779,780],{"class":101},"3",[51,782,537],{"class":94},[51,784,785],{"class":101},"4",[51,787,537],{"class":94},[51,789,790],{"class":101},"5",[51,792,537],{"class":94},[51,794,795],{"class":101},"6",[51,797,798],{"class":94},"};\n",[51,800,802],{"class":53,"line":801},34,[51,803,85],{"emptyLinePlaceholder":84},[51,805,807],{"class":53,"line":806},35,[51,808,272],{"class":111},[51,810,812,814,816,818,821,823,825,828,831,834,836,838],{"class":53,"line":811},36,[51,813,278],{"class":118},[51,815,281],{"class":94},[51,817,284],{"class":118},[51,819,820],{"class":94},"(worker, ",[51,822,119],{"class":118},[51,824,519],{"class":94},[51,826,827],{"class":118},"cref",[51,829,830],{"class":94},"(data), ",[51,832,833],{"class":101},"0",[51,835,537],{"class":94},[51,837,780],{"class":101},[51,839,293],{"class":94},[51,841,843,845,847,849,851,853,855,857,859,861,863,865],{"class":53,"line":842},37,[51,844,278],{"class":118},[51,846,281],{"class":94},[51,848,303],{"class":118},[51,850,820],{"class":94},[51,852,119],{"class":118},[51,854,519],{"class":94},[51,856,827],{"class":118},[51,858,830],{"class":94},[51,860,780],{"class":101},[51,862,537],{"class":94},[51,864,795],{"class":101},[51,866,293],{"class":94},[51,868,870],{"class":53,"line":869},38,[51,871,85],{"emptyLinePlaceholder":84},[51,873,875],{"class":53,"line":874},39,[51,876,320],{"class":111},[51,878,880,882,884],{"class":53,"line":879},40,[51,881,326],{"class":94},[51,883,329],{"class":118},[51,885,332],{"class":94},[51,887,889,891,893],{"class":53,"line":888},41,[51,890,338],{"class":94},[51,892,329],{"class":118},[51,894,332],{"class":94},[51,896,898],{"class":53,"line":897},42,[51,899,85],{"emptyLinePlaceholder":84},[51,901,903,905,907,909,912,914,916,918,920,922,924],{"class":53,"line":902},43,[51,904,278],{"class":118},[51,906,355],{"class":94},[51,908,358],{"class":57},[51,910,911],{"class":61}," \"total = \"",[51,913,364],{"class":57},[51,915,480],{"class":94},[51,917,358],{"class":57},[51,919,371],{"class":61},[51,921,374],{"class":101},[51,923,377],{"class":61},[51,925,105],{"class":94},[51,927,929],{"class":53,"line":928},44,[51,930,85],{"emptyLinePlaceholder":84},[51,932,934,936,938],{"class":53,"line":933},45,[51,935,408],{"class":57},[51,937,102],{"class":101},[51,939,105],{"class":94},[51,941,943],{"class":53,"line":942},46,[51,944,239],{"class":94},[14,946,947,424],{},[421,948,423],{},[42,950,953],{"className":951,"code":952,"language":430,"meta":47},[428],"total = 21\n",[18,954,952],{"__ignoreMap":47},[10,956,958],{"id":957},"lock_guard-和-unique_lock-的区别","lock_guard 和 unique_lock 的区别",[960,961,962,979],"table",{},[963,964,965],"thead",{},[966,967,968,973,976],"tr",{},[969,970,972],"th",{"align":971},"left","锁类型",[969,974,975],{"align":971},"特点",[969,977,978],{"align":971},"常见用途",[980,981,982,995],"tbody",{},[966,983,984,989,992],{},[985,986,987],"td",{"align":971},[18,988,31],{},[985,990,991],{"align":971},"简单，构造加锁，析构解锁，不能手动解锁",[985,993,994],{"align":971},"保护一小段共享数据访问",[966,996,997,1002,1005],{},[985,998,999],{"align":971},[18,1000,1001],{},"std::unique_lock",[985,1003,1004],{"align":971},"可延迟加锁、手动解锁、转移所有权",[985,1006,1007],{"align":971},"条件变量、需要提前释放锁的场景",[14,1009,1010,1011,1014,1015,1018,1019,1022],{},"初学时优先用 ",[18,1012,1013],{},"lock_guard","。只有需要配合 ",[18,1016,1017],{},"condition_variable"," 或者需要更灵活地控制加锁时，再用 ",[18,1020,1021],{},"unique_lock","。",[10,1024,1025],{"id":1025},"常见错误",[1027,1028,1029,1041,1052,1055],"ol",{},[1030,1031,1032,1033,1036,1037,1040],"li",{},"多个线程同时修改共享数据，却没有用 ",[18,1034,1035],{},"mutex"," 或 ",[18,1038,1039],{},"atomic"," 保护。",[1030,1042,1043,1044,1047,1048,1051],{},"手动 ",[18,1045,1046],{},"lock()"," 后忘记 ",[18,1049,1050],{},"unlock()","，或者中途异常导致无法解锁。",[1030,1053,1054],{},"持有锁时做耗时操作，比如睡眠、网络请求、文件 IO。",[1030,1056,1057],{},"锁保护的范围太小，读写共享数据的某些路径漏掉了锁。",[10,1059,1060],{"id":1060},"小结",[1062,1063,1064,1067,1072,1077],"ul",{},[1030,1065,1066],{},"共享数据需要同步保护。",[1030,1068,1069,1071],{},[18,1070,27],{}," 提供互斥访问。",[1030,1073,1074,1076],{},[18,1075,31],{}," 是 RAII 锁，构造加锁，析构解锁。",[1030,1078,1079],{},"锁的作用域越小越好，但必须完整覆盖共享数据访问。",[1081,1082,1083],"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":47,"searchDepth":65,"depth":65,"links":1085},[1086,1087,1091,1092,1093],{"id":12,"depth":65,"text":12},{"id":35,"depth":65,"text":35,"children":1088},[1089,1090],{"id":39,"depth":73,"text":40},{"id":435,"depth":73,"text":436},{"id":957,"depth":65,"text":958},{"id":1025,"depth":65,"text":1025},{"id":1060,"depth":65,"text":1060},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-2-mutex-lock-guard","18.19.2",18190200,"2023-10-05","wiki/2023-10-05-cplusplus-jiao-xue","zh-cn:2023-10-05-cplusplus-jiao-xue","/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki/2023-10-05-Cplusplus教学/ch18-19-2-mutex-lock-guard",false,null,"/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-2-mutex-lock-guard","zh-CN","zh-cn",{},{"title":5,"description":47},"QVNZ1Ou24_Z81PpLtL-lrlNPDEaSoLI041gJAV9lVhE",[1113,1118,1124,1130,1136,1142,1148,1154,1160,1166,1172,1178,1184,1190,1196,1202,1208,1214,1220,1226,1232,1238,1244,1250,1256,1262,1268,1274,1280,1286,1292,1298,1304,1310,1316,1317,1323,1328,1334,1340,1346,1352,1358,1364,1370,1376,1382,1388,1394,1400,1406,1412,1418,1424,1430,1436,1442,1448,1454,1460,1466,1472,1477,1482,1487,1492,1497,1503,1509,1515],{"path":1114,"stem":1115,"title":1116,"date":1097,"chapter":770,"chapterSort":1117,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch1-c-ji-chu-chu-shi","wiki/2023-10-05-Cplusplus教学/ch1-C++基础初识","C++基础初识",1000000,{"path":1119,"stem":1120,"title":1121,"date":1097,"chapter":1122,"chapterSort":1123,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch10-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki/2023-10-05-Cplusplus教学/ch10-内存分区与生命周期","内存分区与生命周期","10",10000000,{"path":1125,"stem":1126,"title":1127,"date":1097,"chapter":1128,"chapterSort":1129,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch11-yin-yong","wiki/2023-10-05-Cplusplus教学/ch11-引用","引用","11",11000000,{"path":1131,"stem":1132,"title":1133,"date":1097,"chapter":1134,"chapterSort":1135,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch12-han-shu-ti-gao-yu-ming-ming-kong-jian","wiki/2023-10-05-Cplusplus教学/ch12-函数提高与命名空间","函数提高与命名空间","12",12000000,{"path":1137,"stem":1138,"title":1139,"date":1097,"chapter":1140,"chapterSort":1141,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-1-feng-zhuang","wiki/2023-10-05-Cplusplus教学/ch13-1-封装","封装","13.1",13010000,{"path":1143,"stem":1144,"title":1145,"date":1097,"chapter":1146,"chapterSort":1147,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-2-dui-xiang-chu-shi-hua-he-qing-li","wiki/2023-10-05-Cplusplus教学/ch13-2-对象初始化和清理","对象初始化和清理","13.2",13020000,{"path":1149,"stem":1150,"title":1151,"date":1097,"chapter":1152,"chapterSort":1153,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-3-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch13-3-对象模型与this指针","对象模型与this指针","13.3",13030000,{"path":1155,"stem":1156,"title":1157,"date":1097,"chapter":1158,"chapterSort":1159,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-4-you-yuan-yu-yun-suan-fu-zhong-zai","wiki/2023-10-05-Cplusplus教学/ch13-4-友元与运算符重载","友元与运算符重载","13.4",13040000,{"path":1161,"stem":1162,"title":1163,"date":1097,"chapter":1164,"chapterSort":1165,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-5-ji-cheng","wiki/2023-10-05-Cplusplus教学/ch13-5-继承","继承","13.5",13050000,{"path":1167,"stem":1168,"title":1169,"date":1097,"chapter":1170,"chapterSort":1171,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-6-duo-tai","wiki/2023-10-05-Cplusplus教学/ch13-6-多态","多态","13.6",13060000,{"path":1173,"stem":1174,"title":1175,"date":1097,"chapter":1176,"chapterSort":1177,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-lei-he-dui-xiang","wiki/2023-10-05-Cplusplus教学/ch13-类和对象","类和对象","13",13000000,{"path":1179,"stem":1180,"title":1181,"date":1097,"chapter":1182,"chapterSort":1183,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch14-wen-jian-cao-zuo","wiki/2023-10-05-Cplusplus教学/ch14-文件操作","文件操作","14",14000000,{"path":1185,"stem":1186,"title":1187,"date":1097,"chapter":1188,"chapterSort":1189,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch15-mu-ban","wiki/2023-10-05-Cplusplus教学/ch15-模板","模板","15",15000000,{"path":1191,"stem":1192,"title":1193,"date":1097,"chapter":1194,"chapterSort":1195,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-1-stl-chu-shi","wiki/2023-10-05-Cplusplus教学/ch16-1-STL初识","STL初识","16.1",16010000,{"path":1197,"stem":1198,"title":1199,"date":1097,"chapter":1200,"chapterSort":1201,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-2-std-array","wiki/2023-10-05-Cplusplus教学/ch16-2-std-array","std::array","16.2",16020000,{"path":1203,"stem":1204,"title":1205,"date":1097,"chapter":1206,"chapterSort":1207,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-3-string-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-3-string容器","string容器","16.3",16030000,{"path":1209,"stem":1210,"title":1211,"date":1097,"chapter":1212,"chapterSort":1213,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-4-vector-yu-deque-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-4-vector与deque容器","vector与deque容器","16.4",16040000,{"path":1215,"stem":1216,"title":1217,"date":1097,"chapter":1218,"chapterSort":1219,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-5-stack-queue-list-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-5-stack-queue-list容器","stack / queue / list 容器","16.5",16050000,{"path":1221,"stem":1222,"title":1223,"date":1097,"chapter":1224,"chapterSort":1225,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-6-set-map-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-6-set-map容器","set / map 容器","16.6",16060000,{"path":1227,"stem":1228,"title":1229,"date":1097,"chapter":1230,"chapterSort":1231,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-7-han-shu-dui-xiang-yu-wei-ci","wiki/2023-10-05-Cplusplus教学/ch16-7-函数对象与谓词","函数对象与谓词","16.7",16070000,{"path":1233,"stem":1234,"title":1235,"date":1097,"chapter":1236,"chapterSort":1237,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-8-chang-yong-suan-fa","wiki/2023-10-05-Cplusplus教学/ch16-8-常用算法","常用算法","16.8",16080000,{"path":1239,"stem":1240,"title":1241,"date":1097,"chapter":1242,"chapterSort":1243,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-stl-ti-gao-bian-cheng","wiki/2023-10-05-Cplusplus教学/ch16-STL提高编程","STL提高编程","16",16000000,{"path":1245,"stem":1246,"title":1247,"date":1097,"chapter":1248,"chapterSort":1249,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch17-c-lei-xing-zhuan-huan","wiki/2023-10-05-Cplusplus教学/ch17-C++类型转换","C++类型转换","17",17000000,{"path":1251,"stem":1252,"title":1253,"date":1097,"chapter":1254,"chapterSort":1255,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-1-auto","wiki/2023-10-05-Cplusplus教学/ch18-1-auto","auto","18.1",18010000,{"path":1257,"stem":1258,"title":1259,"date":1097,"chapter":1260,"chapterSort":1261,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-10-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki/2023-10-05-Cplusplus教学/ch18-10-右值引用和移动语义","右值引用和移动语义","18.10",18100000,{"path":1263,"stem":1264,"title":1265,"date":1097,"chapter":1266,"chapterSort":1267,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-11-lambda-biao-da-shi","wiki/2023-10-05-Cplusplus教学/ch18-11-Lambda表达式","Lambda 表达式","18.11",18110000,{"path":1269,"stem":1270,"title":1271,"date":1097,"chapter":1272,"chapterSort":1273,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-12-std-function","wiki/2023-10-05-Cplusplus教学/ch18-12-std-function","std::function","18.12",18120000,{"path":1275,"stem":1276,"title":1277,"date":1097,"chapter":1278,"chapterSort":1279,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-13-std-bind","wiki/2023-10-05-Cplusplus教学/ch18-13-std-bind","std::bind","18.13",18130000,{"path":1281,"stem":1282,"title":1283,"date":1097,"chapter":1284,"chapterSort":1285,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-14-std-optional","wiki/2023-10-05-Cplusplus教学/ch18-14-std-optional","std::optional","18.14",18140000,{"path":1287,"stem":1288,"title":1289,"date":1097,"chapter":1290,"chapterSort":1291,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-15-std-variant","wiki/2023-10-05-Cplusplus教学/ch18-15-std-variant","std::variant","18.15",18150000,{"path":1293,"stem":1294,"title":1295,"date":1097,"chapter":1296,"chapterSort":1297,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-16-std-span","wiki/2023-10-05-Cplusplus教学/ch18-16-std-span","std::span","18.16",18160000,{"path":1299,"stem":1300,"title":1301,"date":1097,"chapter":1302,"chapterSort":1303,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-17-std-format-print","wiki/2023-10-05-Cplusplus教学/ch18-17-std-format-print","std::format / std::print","18.17",18170000,{"path":1305,"stem":1306,"title":1307,"date":1097,"chapter":1308,"chapterSort":1309,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-18-std-chrono","wiki/2023-10-05-Cplusplus教学/ch18-18-std-chrono","std::chrono","18.18",18180000,{"path":1311,"stem":1312,"title":1313,"date":1097,"chapter":1314,"chapterSort":1315,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-1-std-thread","wiki/2023-10-05-Cplusplus教学/ch18-19-1-std-thread","std::thread 与 join","18.19.1",18190100,{"path":1094,"stem":1103,"title":5,"date":1097,"chapter":1095,"chapterSort":1096,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},{"path":1318,"stem":1319,"title":1320,"date":1097,"chapter":1321,"chapterSort":1322,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-3-std-atomic","wiki/2023-10-05-Cplusplus教学/ch18-19-3-std-atomic","std::atomic","18.19.3",18190300,{"path":1324,"stem":1325,"title":1017,"date":1097,"chapter":1326,"chapterSort":1327,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-4-condition-variable","wiki/2023-10-05-Cplusplus教学/ch18-19-4-condition-variable","18.19.4",18190400,{"path":1329,"stem":1330,"title":1331,"date":1097,"chapter":1332,"chapterSort":1333,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-bing-fa-bian-cheng","wiki/2023-10-05-Cplusplus教学/ch18-19-并发编程","并发编程","18.19",18190000,{"path":1335,"stem":1336,"title":1337,"date":1097,"chapter":1338,"chapterSort":1339,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-2-nullptr","wiki/2023-10-05-Cplusplus教学/ch18-2-nullptr","nullptr","18.2",18020000,{"path":1341,"stem":1342,"title":1343,"date":1097,"chapter":1344,"chapterSort":1345,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-20-std-filesystem","wiki/2023-10-05-Cplusplus教学/ch18-20-std-filesystem","std::filesystem","18.20",18200000,{"path":1347,"stem":1348,"title":1349,"date":1097,"chapter":1350,"chapterSort":1351,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-21-modules-jian-jie","wiki/2023-10-05-Cplusplus教学/ch18-21-modules简介","modules 简介","18.21",18210000,{"path":1353,"stem":1354,"title":1355,"date":1097,"chapter":1356,"chapterSort":1357,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-3-using","wiki/2023-10-05-Cplusplus教学/ch18-3-using","using","18.3",18030000,{"path":1359,"stem":1360,"title":1361,"date":1097,"chapter":1362,"chapterSort":1363,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-4-enum-class","wiki/2023-10-05-Cplusplus教学/ch18-4-enum-class","enum class","18.4",18040000,{"path":1365,"stem":1366,"title":1367,"date":1097,"chapter":1368,"chapterSort":1369,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-5-fan-wei-for-xun-huan","wiki/2023-10-05-Cplusplus教学/ch18-5-范围for循环","范围 for 循环","18.5",18050000,{"path":1371,"stem":1372,"title":1373,"date":1097,"chapter":1374,"chapterSort":1375,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-6-jie-gou-hua-bang-ding","wiki/2023-10-05-Cplusplus教学/ch18-6-结构化绑定","结构化绑定","18.6",18060000,{"path":1377,"stem":1378,"title":1379,"date":1097,"chapter":1380,"chapterSort":1381,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-7-constexpr","wiki/2023-10-05-Cplusplus教学/ch18-7-constexpr","constexpr","18.7",18070000,{"path":1383,"stem":1384,"title":1385,"date":1097,"chapter":1386,"chapterSort":1387,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-8-raii","wiki/2023-10-05-Cplusplus教学/ch18-8-RAII","RAII","18.8",18080000,{"path":1389,"stem":1390,"title":1391,"date":1097,"chapter":1392,"chapterSort":1393,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-9-zhi-neng-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch18-9-智能指针","智能指针","18.9",18090000,{"path":1395,"stem":1396,"title":1397,"date":1097,"chapter":1398,"chapterSort":1399,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-xian-dai-c","wiki/2023-10-05-Cplusplus教学/ch18-现代C++","现代C++","18",18000000,{"path":1401,"stem":1402,"title":1403,"date":1097,"chapter":1404,"chapterSort":1405,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-1-ding-shi-qi-yu-yi-bu-io","wiki/2023-10-05-Cplusplus教学/ch19-1-1-定时器与异步IO","定时器与异步 IO","19.1.1",19010100,{"path":1407,"stem":1408,"title":1409,"date":1097,"chapter":1410,"chapterSort":1411,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-2-boost-asio-ji-chu","wiki/2023-10-05-Cplusplus教学/ch19-1-2-Boost.Asio基础","Boost.Asio 基础","19.1.2",19010200,{"path":1413,"stem":1414,"title":1415,"date":1097,"chapter":1416,"chapterSort":1417,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-3-chuan-kou-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-3-串口通信","串口通信","19.1.3",19010300,{"path":1419,"stem":1420,"title":1421,"date":1097,"chapter":1422,"chapterSort":1423,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-4-tcp-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-4-TCP通信","TCP 通信","19.1.4",19010400,{"path":1425,"stem":1426,"title":1427,"date":1097,"chapter":1428,"chapterSort":1429,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-5-udp-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-5-UDP通信","UDP 通信","19.1.5",19010500,{"path":1431,"stem":1432,"title":1433,"date":1097,"chapter":1434,"chapterSort":1435,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-6-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki/2023-10-05-Cplusplus教学/ch19-1-6-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成","19.1.6",19010600,{"path":1437,"stem":1438,"title":1439,"date":1097,"chapter":1440,"chapterSort":1441,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-boost-asio-yi-bu-io-ku","wiki/2023-10-05-Cplusplus教学/ch19-1-Boost.Asio异步IO库","Boost.Asio异步IO库","19.1",19010000,{"path":1443,"stem":1444,"title":1445,"date":1097,"chapter":1446,"chapterSort":1447,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-2-eigen-xian-xing-dai-shu-ku","wiki/2023-10-05-Cplusplus教学/ch19-2-Eigen线性代数库","Eigen线性代数库","19.2",19020000,{"path":1449,"stem":1450,"title":1451,"date":1097,"chapter":1452,"chapterSort":1453,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-3-opencv-ji-suan-ji-shi-jue-ku","wiki/2023-10-05-Cplusplus教学/ch19-3-OpenCV计算机视觉库","OpenCV计算机视觉库","19.3",19030000,{"path":1455,"stem":1456,"title":1457,"date":1097,"chapter":1458,"chapterSort":1459,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-4-pcl-dian-yun-ku","wiki/2023-10-05-Cplusplus教学/ch19-4-PCL点云库","PCL点云库","19.4",19040000,{"path":1461,"stem":1462,"title":1463,"date":1097,"chapter":1464,"chapterSort":1465,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-5-sophus-li-qun-li-dai-shu-ku","wiki/2023-10-05-Cplusplus教学/ch19-5-Sophus李群李代数库","Sophus 李群李代数库","19.5",19050000,{"path":1467,"stem":1468,"title":1469,"date":1097,"chapter":1470,"chapterSort":1471,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-chang-yong-ku","wiki/2023-10-05-Cplusplus教学/ch19-常用库","常用库学习","19",19000000,{"path":1473,"stem":1474,"title":1475,"date":1097,"chapter":775,"chapterSort":1476,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch2-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki/2023-10-05-Cplusplus教学/ch2-数据类型与数据存放","数据类型与数据存放",2000000,{"path":1478,"stem":1479,"title":1480,"date":1097,"chapter":780,"chapterSort":1481,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch3-shu-ru-shu-chu","wiki/2023-10-05-Cplusplus教学/ch3-输入输出","输入输出",3000000,{"path":1483,"stem":1484,"title":1485,"date":1097,"chapter":785,"chapterSort":1486,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch4-yun-suan-fu","wiki/2023-10-05-Cplusplus教学/ch4-运算符","运算符",4000000,{"path":1488,"stem":1489,"title":1490,"date":1097,"chapter":790,"chapterSort":1491,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch5-cheng-xu-liu-cheng-jie-gou","wiki/2023-10-05-Cplusplus教学/ch5-程序流程结构","程序流程结构",5000000,{"path":1493,"stem":1494,"title":1495,"date":1097,"chapter":795,"chapterSort":1496,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch6-shu-zu","wiki/2023-10-05-Cplusplus教学/ch6-数组","数组",6000000,{"path":1498,"stem":1499,"title":1500,"date":1097,"chapter":1501,"chapterSort":1502,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch7-han-shu-yu-tou-wen-jian","wiki/2023-10-05-Cplusplus教学/ch7-函数与头文件","函数与头文件","7",7000000,{"path":1504,"stem":1505,"title":1506,"date":1097,"chapter":1507,"chapterSort":1508,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch8-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch8-指针","指针","8",8000000,{"path":1510,"stem":1511,"title":1512,"date":1097,"chapter":1513,"chapterSort":1514,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":1104},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch9-jie-gou-ti-yu-gong-yong-ti","wiki/2023-10-05-Cplusplus教学/ch9-结构体与共用体","结构体与共用体","9",9000000,{"path":1100,"stem":1516,"title":1517,"date":1097,"chapter":1105,"chapterSort":1518,"docKey":1099,"docRoot":1100,"docTitle":1101,"isWikiDoc":84,"isWikiIndex":84},"wiki/2023-10-05-Cplusplus教学/index","C/C++教程",0,{"variants":1520},[1521,1524,1527,1530,1533],{"path":1522,"localeSlug":1523,"i18nKey":1103},"/en-us/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-2-mutex-lock-guard","en-us",{"path":1525,"localeSlug":1526,"i18nKey":1103},"/zh-hant/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-2-mutex-lock-guard","zh-hant",{"path":1528,"localeSlug":1529,"i18nKey":1103},"/zh-hk/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-2-mutex-lock-guard","zh-hk",{"path":1531,"localeSlug":1532,"i18nKey":1103},"/zh-tw/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-2-mutex-lock-guard","zh-tw",{"path":1094,"localeSlug":1108,"i18nKey":1103},[1522,1106,1525,1106,1528,1106,1531,1106,1094,1106],1780663037985]