锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 緗戜笂寰堝鏄撴壘鍒頒竴涓敤boost::shared_mutex鏉ヤ綔涓鴻鍐欓攣鐨勪緥瀛愶細 涓鐩存病鏈夋鐤戣繃榪欎釜鍋氭硶錛岀洿鍒版渶榪戦」鐩腑鍑虹幇涓涓閿侀棶棰橈紝鏌ヤ簡寰堜箙鎵嶅彂鐜版槸涓婇潰榪欑鍐欐硶閫犳垚鐨勩?/p>
鍐欐祴璇曚唬鐮佽繕鍘熸閿佺殑鎯呮櫙濡備笅錛?/p>
鎯呭艦鎻忚堪濡備笅錛?/p>
1錛氫富綰跨▼鍏堢粰m_mutex鍔犺閿併?/p>
2錛氫富綰跨▼鏁呮剰鐫$湢3縐掑皢鎵ц鏉冮檺鍒囨崲鍑哄幓銆?/p>
3錛歠unc1綰跨▼鑾峰緱鎵ц鏈轟細錛屽皾璇曞姞鍐欓攣琚寕璧楓傚洜涓轟富綰跨▼宸茬粡鏈変竴涓閿佸崰鐢紝鍐欓攣蹇呴』絳夊緟榪欎釜璇婚攣閲婃斁鎵嶈兘榪涘叆銆?/p>
4錛氫富綰跨▼鐫$湢3縐掗啋鏉ワ紝鍚庣畫浠g爜鎯寵幏鍙栦竴涓閿併傜敱浜庤繖涓椂鍊欏凡緇忔湁涓涓啓閿佸湪絳夊緟榪涘叆錛岄偅涔堣繖涓閿佹帓闃熷湪鍐欓攣鍚庨潰錛屽悓鏍瘋鎸傝搗銆?/p>
5錛氫富綰跨▼鍜宖unc1綰跨▼閮借鎸傝搗浜嗭紝鍙戠敓姝婚攣銆?/p>
涓婇潰鐨勬祴璇曚唬鐮侊紝濡傛灉涓棿娌℃湁sleep(3000)錛屽嚭鐜版閿佺殑姒傜巼寰堜綆錛屼絾鎬誨綊鏄瓨鍦ㄦ閿佺殑鍙兘銆?/p>
鎬葷粨錛?/p>
浠ュ墠涓鐩磋涓簉eadLock閿佸拰閫掑綊閿佷竴鏍鳳紝鍦ㄥ悓涓涓嚎紼嬪嬈¤繘鍏ユ病鏈夊叧緋繪墠浼氶犳垚涓婇潰鐨勬閿佸嚭鐜般傛墍浠ワ紝boost::shared_lock浣跨敤瑕佸皬蹇冿紝鍗冧竾涓嶈鍚屼竴涓嚎紼嬪嬈¤繘鍏ャ?/p>
]]>
鏉℃17錛氫互鐙珛璇彞灝?/span>newed瀵硅薄緗叆鏅鴻兘鎸囬拡
Stroe newed objects in smart pointers in standalone statements銆?/span>
璇瘋浣忥細
1錛?span style="font: 7pt 'Times New Roman'"> 浠ョ嫭绔嬭鍙ュ皢newed瀵硅薄瀛樺偍浜庯紙緗叆錛夋櫤鑳芥寚閽堝唴銆傚鏋滀笉榪欐牱鍋氾紝涓鏃﹀紓甯歌鎶涘嚭錛屾湁鍙兘瀵艱嚧闅句互瀵熻鐨勮祫婧愭硠婕忋?/span>
――――――――――――――――――――――――――――
int priority();
Widget> pw,int priority);
――――――――――――――――――――――――――――
Widget>(new Widget),priority());
鍦ㄨ皟鐢?/span>processWidget涔嬪墠錛岀紪璇戝櫒蹇呴』鍒涘緩浠g爜錛屽仛浠ヤ笅涓変歡浜嬶細
1錛?span style="font: 7pt 'Times New Roman'"> 璋冪敤priority
2錛?span style="font: 7pt 'Times New Roman'"> 鎵ц“new Widget”
3錛?span style="font: 7pt 'Times New Roman'"> 璋冪敤trl::shared_ptr鏋勯犲嚱鏁般?/span>
欏哄簭涓嶅畾錛屼絾2涓瀹氭墽琛屼簬3鐨勫墠闈€?/span>
濡傛灉鎵ц欏哄簭鏄互涓嬶細
1錛庢墽琛?#8220;new Widget”
2錛庤皟鐢?/span>priority
3錛庤皟鐢?/span>trl::shared_ptr鏋勯犲嚱鏁般?/span>
姝ょ鎯呭喌涓嬶紝涓囦竴瀵?/span>priority鐨勮皟鐢ㄥ鑷村紓甯革紝“new Widget”榪斿洖鐨勬寚閽堝皢浼氶仐澶憋紝鍥犱負瀹冨皻鏈緗叆trl::shared_ptr鍐呫?/span>
――――――――――――――――――――――――――――
瑙e喅鍔炴硶錛氫互鐙珛鐨勮鍙ュ皢newed瀵硅薄緗叆鏅鴻兘鎸囬拡銆?/span>
Widget> pw(new Widget);
processWidget(pw,priority());