锘??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩视频一区二区在线观看,久久久久久久久久久一区,国产精品一区二区久久http://m.shnenglu.com/Solstice/zh-cnThu, 23 Oct 2025 05:22:18 GMTThu, 23 Oct 2025 05:22:18 GMT60鍦?Boolan 緗戝紑璁層婄綉緇滅紪紼嬪疄鎴樸嬭紼?/title><link>http://m.shnenglu.com/Solstice/archive/2014/12/03/209007.html</link><dc:creator>闄堢</dc:creator><author>闄堢</author><pubDate>Tue, 02 Dec 2014 17:50:00 GMT</pubDate><guid>http://m.shnenglu.com/Solstice/archive/2014/12/03/209007.html</guid><wfw:comment>http://m.shnenglu.com/Solstice/comments/209007.html</wfw:comment><comments>http://m.shnenglu.com/Solstice/archive/2014/12/03/209007.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.shnenglu.com/Solstice/comments/commentRss/209007.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Solstice/services/trackbacks/209007.html</trackback:ping><description><![CDATA[<p>銆婄綉緇滅紪紼嬪疄鎴樸嬫槸涓闂ㄤ互璁茶В瀹炰緥涓轟富鐨勮紼嬶紝姣忎竴鑺傞兘璁蹭竴涓や釜緗戠粶緙栫▼鐨勪緥瀛愮▼搴忥紝璇劇▼鍋忛噸 Linux 鏈嶅姟绔?TCP 緗戠粶緙栫▼銆?/p> <p>鏈紼嬭姹傚惉璇句漢鍛樺凡緇忚榪囥奤nix 緗戠粶緙栫▼銆嬶紝鑳藉啓綆鍗曠殑 TCP echo 鏈嶅姟銆?/p> <p> </p> <p>璇劇▼鍦板潃錛?a title="http://boolan.com/course/4" >http://boolan.com/course/4</a></p> <p>閰嶅欏甸潰錛?a >http://chenshuo.com/pnp</a></p><img src ="http://m.shnenglu.com/Solstice/aggbug/209007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Solstice/" target="_blank">闄堢</a> 2014-12-03 01:50 <a href="http://m.shnenglu.com/Solstice/archive/2014/12/03/209007.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆奓inux 澶氱嚎紼嬫湇鍔$緙栫▼錛氫嬌鐢?muduo C++ 緗戠粶搴撱嬬數瀛愮増涓婂競http://m.shnenglu.com/Solstice/archive/2013/11/01/204039.html闄堢闄堢Fri, 01 Nov 2013 02:35:00 GMThttp://m.shnenglu.com/Solstice/archive/2013/11/01/204039.htmlhttp://m.shnenglu.com/Solstice/comments/204039.htmlhttp://m.shnenglu.com/Solstice/archive/2013/11/01/204039.html#Feedback1http://m.shnenglu.com/Solstice/comments/commentRss/204039.htmlhttp://m.shnenglu.com/Solstice/services/trackbacks/204039.html銆奓inux 澶氱嚎紼嬫湇鍔$緙栫▼錛氫嬌鐢?muduo C++ 緗戠粶搴撱?鐢靛瓙鐗堝凡鍦ㄤ含涓滀笂甯傞攢鍞?/p>

璐拱鍦板潃錛?a >http://e.jd.com/30149978.html

闃呰鏁堟灉錛?/p>

PC

ebookpc

iPad

ebookipad

鐩墠浜笢鐨勯槄璇誨櫒娌℃湁鍒囩櫧杈瑰姛鑳斤紝鍊煎緱鏀硅繘銆?/p>

闄堢 2013-11-01 10:35 鍙戣〃璇勮
]]>
C++闈㈣瘯涓璼tring綾葷殑涓縐嶆紜畝鏄庣殑鍐欐硶http://m.shnenglu.com/Solstice/archive/2013/10/11/203654.html闄堢闄堢Fri, 11 Oct 2013 02:59:00 GMThttp://m.shnenglu.com/Solstice/archive/2013/10/11/203654.htmlhttp://m.shnenglu.com/Solstice/comments/203654.htmlhttp://m.shnenglu.com/Solstice/archive/2013/10/11/203654.html#Feedback0http://m.shnenglu.com/Solstice/comments/commentRss/203654.htmlhttp://m.shnenglu.com/Solstice/services/trackbacks/203654.html鏈枃棣栧彂浜庨叿澹崇綉 http://coolshell.cn/articles/10478.html

鍏堣璇寸▼搴忓憳錛堝簲灞婄敓錛夐潰璇曠殑涓鑸繃紼嬶紝涓杞潰璇曪紙闈㈠涓鍒頒袱涓潰璇曞畼錛変竴鑸槸鍥涖佷簲鍗佸垎閽燂紝闈㈣瘯瀹樹細闂袱涓変釜緙栫▼闂錛堥氬父鏄袱澶т竴灝忥級錛屽洜姝ょ暀緇欐瘡涓紪紼嬮鐨勬椂闂村彧鏈?20 鍒嗛挓銆傝繖 20 鍒嗛挓涓嶅厜鏄啓浠g爜錛岃繕瑕佽窡闈㈣瘯瀹樿璁轟綘鐨勭瓟妗堝茍瑙g瓟鎻愰棶錛屾瘮濡傞潰璇曞畼鎷胯繃浣犵殑絳旀綰革紝闂煇涓琛屼唬鐮佸鏋滀慨鏀逛細鏈変粈涔堝悗鏋溿傚洜姝ょ湡姝g暀緇欏湪綰鎬笂鎴栫櫧鏉夸笂鍐欎唬鐮佺殑鏃墮棿涔熷氨 10 鍒嗛挓涓婁笅銆傛湰鏂囩粰鍑轟簡涓涓兘鐢?10 鍒嗛挓鏃墮棿鍦ㄧ焊涓婂啓鍑烘潵涓斾笉浼氭湁閿欑殑 String class錛屽己璋冩紜у強鏄撳疄鐜幫紙鐧芥澘涓婂啓涔熶笉浼氶敊錛夛紝涓嶅己璋冩晥鐜囦笌鍔熻兘瀹屽銆?/p>

鏈枃鐨勯厤濂椾唬鐮佷綅浜?https://github.com/chenshuo/recipes/blob/master/string/StringTrivial.h銆?/p>

鍏ㄦ枃錛?a title="https://chenshuo.googlecode.com/files/CppEngineering.pdf" >https://chenshuo.googlecode.com/files/CppEngineering.pdf



闄堢 2013-10-11 10:59 鍙戣〃璇勮
]]>
璇昏呮潵淇′笌瑙g瓟 1http://m.shnenglu.com/Solstice/archive/2013/10/10/203638.html闄堢闄堢Thu, 10 Oct 2013 04:17:00 GMThttp://m.shnenglu.com/Solstice/archive/2013/10/10/203638.htmlhttp://m.shnenglu.com/Solstice/comments/203638.htmlhttp://m.shnenglu.com/Solstice/archive/2013/10/10/203638.html#Feedback0http://m.shnenglu.com/Solstice/comments/commentRss/203638.htmlhttp://m.shnenglu.com/Solstice/services/trackbacks/203638.html璇昏呮潵淇$敤榛戣壊錛屾垜鐨勫洖絳旂敤钃濊壊銆傜粡榪囨暣鐞嗭紝鎺ヨ繎瀵硅瘽浣撱?/p>

> 闄堢錛屼綘濂斤紝
>
> 闃呰浜嗕綘鐨勪功錛屽緢鏈夋敹鑾楓?br>> 浣嗘槸娌℃湁鍦╩oduo鐨勬簮浠g爜閲岄潰鎵懼埌瀹炵幇綰跨▼妯″瀷11鐨勪緥瀛愩傚嵆one thread per loop + thread pool銆?br>> 璋㈣阿銆?/p>

涔︾ 173 欏靛浘 6-14 涓嬮潰鐨勭涓孌佃瘽錛屽叿浣撴敼鍔ㄦ柟娉曞弬鑰冨墠涓欏電殑 diff銆?/font>


> 璋㈣阿銆?br>>
> 鍙﹀TcpConnection鍜孋hannel鐨勭敓鍛藉懆鏈熺鐞嗘湁鐐歸棶棰樸?br>> TcpConnection濡傛灉宸茬粡琚洖鏀朵簡錛屽叾鍖呭惈鐨凜hannel涔熷凡緇忚鍥炴敹浜嗐傝岃繖涓椂鍊欏湪Channel::handleEvent()閲岄潰媯鏌ied_鍜宼ie_鏄嵄闄╃殑銆傚洜涓哄叾鍐呭瓨宸茬粡琚洖鏀朵簡銆?br>>
> 濡傛灉鐢ㄦ埛淇濊瘉TcpConnection琚洖鏀朵箣鍚庯紝涓嶄細鍐嶇敤Channel鐨勮8鎸囬拡錛屽垯娌℃湁蹇呰鍦═cpConnection::connectEstablished()涓璫all tie().

TcpConnection 鍥炴敹涔嬪墠錛屼細璋冪敤 connectDestroyed錛屽叾涓皟鐢?channel_->remove();錛岃繖鏍峰氨涓嶅彲鑳藉啀浼氭湁 Channel::handleEvent() 琚皟鐢ㄤ簡銆?/font>

tie() 鐨勪綔鐢ㄦ槸闃叉 Channel::handleEvent() 榪愯鏈熼棿鍏?owner 瀵硅薄鏋愭瀯錛屽鑷?Channel 鏈韓琚攢姣併?/font>


> > TcpConnection 鍥炴敹涔嬪墠錛屼細璋冪敤 connectDestroyed錛屽叾涓皟鐢?channel_->remove();錛岃繖鏍峰氨涓嶅彲鑳藉啀浼氭湁 Channel::handleEvent() 琚皟鐢ㄤ簡銆?br>> 榪欎釜鏃跺欎細涓嶄細鏈塺ace condition錛熷亣璁劇幇鍦ㄦ湁涓や釜active channels錛屽鐞嗗ご涓涓殑鏃跺欏洖鏀禩cpConnection錛岃岀浜屼釜channel鍒氬ソ瀵瑰簲榪欎釜connection銆?/p>

榪欐椂浣犳病鏈夊姙娉曞己鍒墮攢姣?TcpConnection錛屽彧鑳介檷浣庡叾寮曠敤璁℃暟錛屾墍浠ヤ笉浼氭湁闂銆備綘鍙互鍐欐浠g爜璇曡瘯銆?/font>

> 鍙﹀搴曞眰鐨刾oller OS api鏄惁淇濊瘉unregister channel涔嬪悗涓瀹氫笉浼氬啀鏈夎繖涓猚hannel鐨勪簨浠訛紝浼氭竻絀哄唴鏍哥殑宸茬粡灝辯華鐨勪簨浠墮槦鍒楋紵

璺熷唴鏍告病鍏崇郴錛孭oller class 鍦?unregister channel 涔嬪悗灝變笉鍙兘璋冪敤鍏?handleEvent() 鎴愬憳鍑芥暟銆?/font>

> 閭PollPoller::fillActiveChannels()鐨勬敼涓鏀癸紝鈥渁ssert(it != channels_.end());鈥濅笉鍐嶉傜敤浜嗭紝鑰屼笖姣忔閮戒釜event閮借鏌ヤ竴嬈ap銆傛晥鐜囦細鏈夐棶棰樸?/p>

assert() 鍙湁鍦?debug build 鎵嶆墽琛岋紝涓嶄細褰卞搷鏁堢巼銆?br>鍐嶈姣忎釜 event 閮借娑夊強 read/write 絳夌郴緇熻皟鐢紝寮閿姣斺滄煡涓嬈?map鈥濆ぇ寰楀錛屼紭鍖栬繖閲屾槸鏃犵敤鍔熴?/strong>

> 浣嗚繖涓猘ssert()涓嶆槸invalid浜嗗悧錛熶綘鍙兘涔嬪墠鍦╱nregister channel鐨勬椂鍊欏凡緇忎粠map閲岄潰remove鎺変簡瀹冦?

榪欎釜 assert 鏄湁鏁堢殑錛屼綘鍐嶆兂鎯熾?/font>


> > tie() 鐨勪綔鐢ㄦ槸闃叉 Channel::handleEvent() 榪愯鏈熼棿鍏?owner 瀵硅薄鏋愭瀯錛屽鑷?Channel 鏈韓琚攢姣併?/font>

> 榪欎釜涔熶笉澶猰ake sense銆備粛鐒舵湁race conditon銆傚湪Channel::handleEvent()鎷ユ湁guard閿佸畾ownner涔嬪墠錛孋hannel::handleEvent錛?闇瑕佹鏌ュ叾tied_銆?/p>

浣犲啀鎯蟲兂錛宼ie 鐨勪綔鐢ㄦ槸闃叉璋冪敤 handleEvent() 鏈熼棿瀵硅薄閿姣侊紙姣斿璋冪敤 closeCallback 鏈熼棿錛夛紝涓嶆槸涔熶笉鍙兘闃叉璋冪敤 handleEvent() 涔嬪墠瀵硅薄閿姣併?/strong>

> 鎭╋紝鏄殑銆傛暣涓猅cpConnection, Channel, EventLoop閮芥槸涓涓猼hread閲岄潰run鐨勩?/font>



闄堢 2013-10-10 12:17 鍙戣〃璇勮
]]>
[杞澆]璧栧媷嫻╋細鎺ㄨ崘銆奓inux 澶氱嚎紼嬫湇鍔″櫒绔紪紼嬨?/title><link>http://m.shnenglu.com/Solstice/archive/2013/10/06/202822.html</link><dc:creator>闄堢</dc:creator><author>闄堢</author><pubDate>Sat, 05 Oct 2013 18:15:00 GMT</pubDate><guid>http://m.shnenglu.com/Solstice/archive/2013/10/06/202822.html</guid><wfw:comment>http://m.shnenglu.com/Solstice/comments/202822.html</wfw:comment><comments>http://m.shnenglu.com/Solstice/archive/2013/10/06/202822.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Solstice/comments/commentRss/202822.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Solstice/services/trackbacks/202822.html</trackback:ping><description><![CDATA[<p style="margin-top: 10px; margin-bottom: 10px; font-family: verdana, Arial, Helvetica, sans-serif;">鎺ㄨ崘銆奓inux 澶氱嚎紼嬫湇鍔″櫒绔紪紼嬨?nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: verdana, Arial, Helvetica, sans-serif;">璧栧媷嫻╋紙http://laiyonghao.com錛?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: verdana, Arial, Helvetica, sans-serif;">鏈榪戯紝鏈変竴浣嶆湅鍙嬪洜涓哄伐浣滈渶瑕侊紝闇瑕佷粠緗戞父鐨勫鎴風緙栫▼杞悜鏈嶅姟鍣ㄧ緙栫▼錛屾壘鎴戞帹鑽愪竴鏈功銆傛垜鎺ㄨ崘浜嗐奓inux 澶氱嚎紼嬫湇鍔″櫒绔紪紼?#8212;—浣跨敤 muduo C++ 緗戠粶搴撱嬬粰浠栵紝浠栧湪緗戜笂涔﹀簵鐪嬩簡浠ュ悗闂垜涓轟粈涔堟帹鑽愯繖涔堝帤涓鏈功緇欎粬錛屾濂借繖鏈功鎴戝凡緇忔棭灝辯湅瀹屼簡錛屼竴鐩翠篃鎯沖啓綃?#8220;涔﹁瘎”錛屽氨鍦ㄨ繖閲屽鎵嚑鍙ャ傚叾瀹炲疄鍦ㄧ畻涓嶄笂涔﹁瘎錛屽師鍥犳湁浜岋細涓鏄涔︾殑鏃跺欏洬鍥靛悶鏋o紝鐞嗚В涓嶅娣卞埢錛屼笉娣卞埢鑷劧涓嶈兘璇勶紱浜屾槸榪欏嚑騫磋櫧鐒跺湪 Linux 涓嬪啓鏈嶅姟鍣ㄧ鐨勭綉緇滅▼搴忥紝浣嗗緢灝戠敤澶氱嚎紼嬶紝涔熷緢灝戠敤 C++錛屼功閲岃皥鐨勪笢瑗匡紝綆楁槸涓嶇啛鎮夌殑棰嗗煙錛岃嚜鐒朵篃涓嶈兘涔辮瘎銆傛墍浠ヤ粖澶╄繖綃囷紝搴斿綋鏄帹鑽愶紝鏄負闄堢鑰佸笀鑳屼功銆?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: verdana, Arial, Helvetica, sans-serif;">緇х畫闃呰錛?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: verdana, Arial, Helvetica, sans-serif;"><a target="_blank" data-mce->http://blog.csdn.net/gzlaiyonghao/article/details/10366863</a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: verdana, Arial, Helvetica, sans-serif;"><a target="_blank" data-mce->http://book.douban.com/review/6249351/</a></p><img src ="http://m.shnenglu.com/Solstice/aggbug/202822.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Solstice/" target="_blank">闄堢</a> 2013-10-06 02:15 <a href="http://m.shnenglu.com/Solstice/archive/2013/10/06/202822.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鐢ㄦ潯浠跺彉閲忓疄鐜頒簨浠剁瓑寰呭櫒鐨勬紜笌閿欒鍋氭硶http://m.shnenglu.com/Solstice/archive/2013/09/09/203094.html闄堢闄堢Sun, 08 Sep 2013 19:01:00 GMThttp://m.shnenglu.com/Solstice/archive/2013/09/09/203094.htmlhttp://m.shnenglu.com/Solstice/comments/203094.htmlhttp://m.shnenglu.com/Solstice/archive/2013/09/09/203094.html#Feedback21http://m.shnenglu.com/Solstice/comments/commentRss/203094.htmlhttp://m.shnenglu.com/Solstice/services/trackbacks/203094.htmlTL;DR 濡傛灉浣犺兘涓鐪肩湅鍑?https://gist.github.com/chenshuo/6430925 涓殑閭?8 涓?Waiter classes 鍝簺鏄鐨勫摢浜涙槸閿欑殑錛屾湰鏂囧氨涓嶅繀鐪嬩簡銆?/p>

鍓嶅嚑澶╋紝鎴戝彂浜嗕竴鏉″井鍗?http://weibo.com/1701018393/A7FrW7ZVd 錛岃川鐤戞煇鏈功瀵?Pthreads 鏉′歡鍙橀噺鐨勫皝瑁呮槸閿欑殑錛屽洜涓哄畠娌℃湁鎶?mutex 鐨?lock()/unlock() 鍑芥暟鏆撮湶鍑烘潵錛屽鑷存棤娉曞疄鐢ㄣ傚悗鏉ュぇ瀹惰璁虹殑鍒嗘鏄繖涓?cond class 鏄笉鏄氱敤鐨勬潯浠跺彉閲忓皝瑁咃紝榪樻槸鍙槸涓涓壒孌婄殑“浜嬩歡絳夊緟鍣?#8221;銆備綔涓轟簨浠剁瓑寰呭櫒錛屽叾瀹炵幇涔熸槸閿欑殑錛屽洜涓哄瓨鍦ㄤ涪澶變簨浠剁殑鍙兘錛屽彲浠ョ畻鏄垵瀛﹁呬嬌鐢ㄦ潯浠跺彉閲忕殑鍏稿瀷閿欒銆?/p>

鏈枃鐨勪唬鐮佷綅浜?recipes/thread/test/Waiter_test.cc錛岃繖閲屾彁鍒扮殑鏌愪功鐨勭増鏈浉褰撲簬 Waiter1 class銆?/p>

鎴戝湪鎷欎綔銆奓inux 澶氱嚎紼嬫湇鍔$緙栫▼錛氫嬌鐢?muduo C++ 緗戠粶搴撱嬬 2.2 鑺傛葷粨浜嗘潯浠跺彉閲忕殑浣跨敤瑕佺偣錛?/p>

鏉′歡鍙橀噺鍙湁涓縐嶆紜嬌鐢ㄧ殑鏂瑰紡錛屽嚑涔庝笉鍙兘鐢ㄩ敊銆傚浜?wait 绔細
1. 蹇呴』涓?mutex 涓璧蜂嬌鐢紝璇ュ竷灝旇〃杈懼紡鐨勮鍐欓渶鍙楁 mutex 淇濇姢銆?br />2. 鍦?mutex 宸蹭笂閿佺殑鏃跺欐墠鑳借皟鐢?wait()銆?br />3. 鎶婂垽鏂竷灝旀潯浠跺拰 wait() 鏀懼埌 while 寰幆涓?/font>

瀵逛簬 signal/broadcast 绔細
1. 涓嶄竴瀹氳鍦?mutex 宸蹭笂閿佺殑鎯呭喌涓嬭皟鐢?signal 錛堢悊璁轟笂錛夈?br />2. 鍦?signal 涔嬪墠涓鑸淇敼甯冨皵琛ㄨ揪寮忋?br />3. 淇敼甯冨皵琛ㄨ揪寮忛氬父瑕佺敤 mutex 淇濇姢錛堣嚦灝戠敤浣?full memory barrier錛夈?br />4. 娉ㄦ剰鍖哄垎 signal 涓?broadcast錛?#8220;broadcast 閫氬父鐢ㄤ簬琛ㄦ槑鐘舵佸彉鍖栵紝signal 閫氬父鐢ㄤ簬琛ㄧず璧勬簮鍙敤銆傦紙broadcast should generally be used to indicate state change rather than resource availability銆傦級”

濡傛灉鐢ㄦ潯浠跺彉閲忔潵瀹炵幇涓涓?#8220;浜嬩歡絳夊緟鍣?Waiter”錛屾紜殑鍋氭硶鏄庢牱鐨勶紵鎴戠殑鏈緇堢瓟妗堣 WaiterInMuduo class銆?#8220;浜嬩歡絳夊緟鍣?#8221;鐨勪竴縐嶇敤閫旀槸紼嬪簭鍚姩鏃剁瓑寰呭垵濮嬪寲瀹屾垚錛屼篃鍙互鐩存帴鐢?muduo::CountDownLatch 鍒拌揪鐩稿悓鐨勭洰鐨勶紝灝嗗垵鍊艱涓?1 鍗沖彲銆?/p>

浠ヤ笅鏍規嵁寰崥涓婄殑璁ㄨ榪囩▼緇欏嚭鍑犱釜姝g‘鎴栭敊璇殑鐗堟湰錛屽崥澶у涓絎戙?font color="#0000ff">鍙璁頒綇 Pthread 鐨勬潯浠跺彉閲忔槸杈規部瑙﹀彂錛坋dge trigger錛夛紝鍗?signal()/broadcast() 鍙細鍞ら啋宸茬粡絳夊湪 wait() 涓婄殑綰跨▼(s)錛?/font>鎴戜滑鍦ㄧ紪鐮佹椂蹇呴』瑕佽冭檻 signal() 鏃╀簬 wait() 鐨勫彲鑳斤紝閭d箞灝卞緢瀹規槗鍒ゆ柇浠ヤ笅鍚勪釜鐗堟湰鐨勬璇簡銆備唬鐮佽 recipes/thread/test/Waiter_test.cc銆?/p>

鐗堟湰涓錛?font color="#ff0000">閿欒銆傛煇涔︿笂鐨勫師濮嬬増錛屾湁涓㈠け浜嬩歡鐨勫彲鑳姐?/p>

1

鐗堟湰浜岋細閿欒銆俵ock() 涔嬪悗鍐?signal()錛屽悓鏍鋒湁涓㈠け浜嬩歡鐨勫彲鑳姐?/p>

2

鐗堟湰涓夛細閿欒銆傚紩鍏ヤ簡 bool signaled_; 鏉′歡錛屼絾娌℃湁姝g‘澶勭悊 spurious wakeup銆?/p>

鐗堟湰鍥涗簲鍏細姝g‘銆備粎闄?single waiter 浣跨敤銆?br />

鐗堟湰涓冿細鏈浣熾傚彲渚?multiple waiters 浣跨敤銆?br />

鐗堟湰鍏細閿欒銆傚瓨鍦?data race錛屼笖鏈変涪澶變簨浠剁殑鍙兘銆傜悊鐢辮 http://stackoverflow.com/questions/4544234/calling-pthread-cond-signal-without-locking-mutex

鎬葷粨錛氫嬌鐢ㄦ潯浠跺彉閲忥紝璋冪敤 signal() 鐨勬椂鍊欐棤娉曠煡閬撴槸鍚﹀凡緇忔湁綰跨▼絳夊緟鍦?wait() 涓娿傚洜姝や竴鑸繪槸瑕佸厛淇敼“鏉′歡”錛屼嬌鍏朵負 true錛屽啀璋冪敤 signal()錛涜繖鏍?wait 綰跨▼鍏堟鏌?#8220;鏉′歡”錛屽彧鏈夊綋鏉′歡涓嶆垚绔嬫椂鎵嶅幓 wait()錛岄伩鍏嶄簡涓簨浠剁殑鍙兘銆?span style="color: #333333; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; background-color: #ffffff;">鎹㈣█涔嬶紝閫氳繃浣跨敤“鏉′歡”錛屽皢杈規部瑙﹀彂錛坋dge trigger錛夋敼涓虹數騫寵Е鍙戯紙level trigger錛夈?/span>榪欓噷“淇敼鏉′歡”鍜?#8220;媯鏌ユ潯浠?#8221;閮藉繀欏誨湪 mutex 淇濇姢涓嬭繘琛岋紝鑰屼笖榪欎釜 mutex 蹇呴』鐢ㄤ簬閰嶅悎 wait()銆?/p>

鎬濊冮錛氬鏋滅敤涓や釜 mutex錛屼竴涓敤浜庝繚鎶?#8220;鏉′歡”錛屽彟涓涓笓闂ㄧ敤浜庡拰 cond 閰嶅悎 wait()錛屼細鍑虹幇浠涔堟儏鍐碉紵

鏈鍚庢敞鏄庝竴鐐癸紝http://stackoverflow.com/questions/6419117/signal-and-unlock-order 榪欑瘒甯栧瓙閲屽 spurious wakeup 鐨勮В閲婃槸閿欑殑錛宻purious wakeup 鎸囩殑鏄竴嬈?signal() 璋冪敤鍞ら啋涓や釜鎴栦互涓?wait()ing 鐨勭嚎紼嬶紝鎴栬呮病鏈夎皟鐢?signal() 鍗存湁綰跨▼浠?wait() 榪斿洖銆俶anpage 閲屽 Pthreads 緋誨垪鍑芥暟鐨勪粙緇嶉潪甯稿埌浣嶏紝鍊煎緱緇嗚銆?/p>

闄堢 2013-09-09 03:01 鍙戣〃璇勮
]]>
鐢╩uduo瀹炵幇memcached鍗忚鐨勪緥瀛?/title><link>http://m.shnenglu.com/Solstice/archive/2013/08/18/202613.html</link><dc:creator>闄堢</dc:creator><author>闄堢</author><pubDate>Sun, 18 Aug 2013 04:59:00 GMT</pubDate><guid>http://m.shnenglu.com/Solstice/archive/2013/08/18/202613.html</guid><wfw:comment>http://m.shnenglu.com/Solstice/comments/202613.html</wfw:comment><comments>http://m.shnenglu.com/Solstice/archive/2013/08/18/202613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Solstice/comments/commentRss/202613.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Solstice/services/trackbacks/202613.html</trackback:ping><description><![CDATA[<p>鏈榪戣姳浜嗕袱澶╂椂闂寸敤 muduo 閮ㄥ垎瀹炵幇浜?memcached 鏈嶅姟鍣ㄥ崗璁紝浠g爜浣嶄簬 examples/memcached/server錛岃兘閫氳繃 memcached 鐨勫ぇ閮ㄥ垎嫻嬭瘯鐢ㄤ緥錛坕ncr/decr 榪樻病鏈夊疄鐜幫級銆?/p> <p>榪欎笉鏄?memcached 鐨勬浛浠e搧錛堝畠娌℃湁瀹炵幇LRU鍜岃秴鏃跺姛鑳斤紝涔熸病鏈夊疄鐜頒簩榪涘埗鍗忚錛屾洿娌℃湁鑷繁綆$悊鍐呭瓨錛夛紝鑰屾槸涓涓綉緇滅紪紼嬬殑紺轟緥錛堜唬鐮佸彧鏈?1000 琛岋紝姣?memcached 灝忓緢澶氾級錛屽睍紺?muduo 椋庢牸鐨勪簨浠墮┍鍔ㄧ紪紼嬶紝浠ュ強灝嗘潵鎬ц兘浼樺寲鐨勮瘯楠屽搧錛堟崲鍙ヨ瘽璇達紝鐜板湪榪欎釜鐗堟湰瀹屽叏娌℃湁鍦ㄦц兘涓婂仛鍑轟換浣曞姫鍔涳級銆傝榪?memcached 浠g爜鐨勪漢鍙互瀵規瘮榪欎袱縐嶇紪紼嬮鏍肩殑鍖哄埆錛宮emcached 鐨?read/write 鎿嶄綔絀挎彃浜庢甯擱昏緫澶勭悊錛岃?muduo 鐨勭綉緇滄暟鎹鍐欐槸鐢卞簱瀹屾垚錛屽簲鐢ㄧ▼搴忓彧鍏沖績娑堟伅鏀跺彂錛岀洰鍓嶄簩鑰呯殑鍩烘湰 get/set 鎿嶄綔鐨勬ц兘鐩稿綋銆?/p> <p>鐜板湪 muduo 鐨?inspector 鍐呯疆浜?gperftools 鐨勮繙紼?profiling 鍔熻兘錛宮emcached-debug 灞曠ず浜嗗叾鐢ㄦ硶銆?/p> <p>涓轟粈涔堜笉蹇呬紭鍖?set 鎿嶄綔錛堝惈 set/add/update/append/prepend/cas 絳夛級鐨勬ц兘錛?/p> <p>1. 姣斾緥銆傛棦鐒舵槸 memcache錛岄偅涔?get:set 鐨勬瘮渚嬪緢楂橈紝10:1 鐢氳嚦鏇撮珮錛屽洜姝や紭鍖栫殑閲嶅績搴旇鏄?get 鑰岄潪 set銆?/p> <p>鍋囪 memcached 鑳藉鐞?100k QPS錛屽啀鍋囪榪欎簺鎿嶄綔閮芥槸 set錛堝叾瀹炲簲璇ヤ笉鍒?10% 鏄?set錛夛紝鍐嶅亣璁炬墍鏈夌殑 set 閮芥槸涓茶鎵ц鐨勶紙娌℃湁騫跺彂錛夛紝閭d箞姣忔 set 鐨?CPU 鏃墮棿涓嶅簲璇ヨ秴榪?10 us錛堝惈鏈嶅姟鍣ㄦ湰鍦扮殑緗戠粶浠g爜榪愯鏃墮棿錛屼絾涓嶅惈緗戠粶寤惰繜錛夈傝屽疄闄呬笂涓嬈?set 鐨?CPU 鏃墮棿鏈澶氭槸 2~3 us 錛堢敤 memcached-footprint 紼嬪簭嫻嬪緱錛夛紝鏍規湰涓嶅煎緱浼樺寲銆?/p> <p>2. 緗戠粶甯﹀銆傚亣璁句竴嬈?set 鎿嶄綔鐨?key + value 鐨勯暱搴︽槸 1k bytes錛孴CP 鐨勬湁鏁堣澆鑽峰甫瀹芥寜110MB/s浼扮畻錛岄偅涔?kB鏁版嵁鍦ㄥ崈鍏嗙綉涓婄殑鎯у歡榪熸槸 9us錛堜紶杈撳歡榪熸槸鍑犲崄涓婄櫨寰錛屼笌姝ゆ棤鍏籌級錛屼篃灝辨槸璇存湇鍔″櫒鐨勭綉鍗℃敹鍒拌繖 1kB 鏁版嵁闇瑕佽姳 9us 鏃墮棿錛堜粠絎竴涓瓧鑺傚埌杈懼埌鏈嶅姟鍣ㄥ埌鏀跺畬鏈鍚庝竴涓瓧鑺傦級錛岄偅涔堝湪 set 鑰楁椂 2~3 us 鐨勬儏鍐典笅鍐嶅幓浼樺寲瀹冩槸鍋氭棤鐢ㄥ姛銆?/p> <p>3. 浜х敓“闇瑕佹洿鏂扮殑鏁版嵁”鐨勬垚鏈繙澶т簬 memcached set 鐨勫紑閿銆俶emcached 闇瑕佹洿鏂幫紝寰寰鏄皢宸插啓鍏ユ暟鎹簱鐨勬柊鏁版嵁鏀懼埌 memcached 涓紝閭d箞鍐欐暟鎹簱鐨勫紑閿榪滆繙澶т簬 memcached set 鐨勫紑閿錛屼紭鍖?set 瀵規彁鍗囩郴緇熸暣浣撴ц兘娌℃剰涔夈?/p><img src ="http://m.shnenglu.com/Solstice/aggbug/202613.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Solstice/" target="_blank">闄堢</a> 2013-08-18 12:59 <a href="http://m.shnenglu.com/Solstice/archive/2013/08/18/202613.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>榪戞湡寰崥鍚愭Ы璦璁哄瓨妗o紝娑夊強&ldquo;鎬ц兘浼樺寲&rdquo;銆丆++闄嬩範絳?/title><link>http://m.shnenglu.com/Solstice/archive/2013/08/12/202489.html</link><dc:creator>闄堢</dc:creator><author>闄堢</author><pubDate>Mon, 12 Aug 2013 05:54:00 GMT</pubDate><guid>http://m.shnenglu.com/Solstice/archive/2013/08/12/202489.html</guid><wfw:comment>http://m.shnenglu.com/Solstice/comments/202489.html</wfw:comment><comments>http://m.shnenglu.com/Solstice/archive/2013/08/12/202489.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://m.shnenglu.com/Solstice/comments/commentRss/202489.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Solstice/services/trackbacks/202489.html</trackback:ping><description><![CDATA[<p><font color="#0000ff">鍐機++紼嬪簭鐨勫嚑涓檵涔狅細class 鍚嶄互澶у啓 C 寮澶達紝渚嬪 CDate錛涙垚鍛樺彉閲忎互 m_ 寮澶達紱鍙橀噺閲囩敤鍖堢墮鍒╁懡鍚嶆硶錛涗笉鐭ラ亾浣曟椂紱佺敤 copy-ctor/assign operator銆?/font>鍓嶄笁涓彲鑳芥槸浠嶮FC閭i噷浼犱笅鏉ョ殑錛屽綋鏃禖++銆乧lass銆丱O鏄柊鐜╂剰鍎匡紝瑕佷笌 C struct 鍖哄垎錛岀幇鍦ㄨ繕榪欎箞鍋氬氨鍦熶簡銆侰++鐨勬垚鍛樺彉閲忓彲鐢ㄧ壒孌婂懡鍚嶆牸寮忥紝鍔犱笅鍒掔嚎鍚庣紑鍗沖彲錛堝姞涓嬪垝綰垮墠緙鏄敊鐨勶級銆備絾鍦?Java 閲屼笉蹇呮ā浠?C++ 鐨勮繖縐嶆垚鍛樺彉閲忓懡鍚嶆柟寮忥紝IDE 鍙互璁╂垚鍛樺彉閲忎互涓嶅悓鐨勯鑹叉樉紺猴紝涓庡眬閮ㄥ彉閲忓尯鍒嗭紝鏍規湰鏃犻渶鐗規畩鍛藉悕銆傚啓紼嬪簭灝辨曟妸浠ュ墠鐨勭紪紼嬬粡楠屼笉鍔犲尯鍒嗗湴搴旂敤鍒版柊璇█涓紝鍐欐垚鍥涗笉鍍忥紝涓嶅湴閬撱?/p> <p>鐭ラ亾紱佺敤 copy-ctor/assign operator 鏄?C++ 紼嬪簭鍛樼殑璇曢噾鐭熾傚湪鐪嬪埌涓涓紑婧愰」鐩椂錛屾垜涓鑸細鍏堟煡鐪嬪叾 RAII handle class 鏄惁紱佺敤浜?copy-ctor/assign operator錛堜緥濡?Thread銆丮utex銆丆ondVar銆丆onnection錛夛紝濡傛灉娌℃湁錛屽鍏剁涓鍗拌薄灝卞緢宸簡銆?/p> <p>鍏充簬 class 鍛藉悕椋庢牸錛孏oogle銆丩LVM銆丮ozilla銆乵uduo 閮介噰鐢?Pascal 椋庢牸錛圠ikeThis錛夛紝渚嬪 EventLoop銆丼udokuSolver 絳夌瓑銆傛宸у畠浠篃閮芥槸鐢?2 鏍肩緝榪涚殑錛屽彲浠ョ敤 clang-format 鑷姩鏍煎紡鍖栦唬鐮併?/p> <p>欏轟究璇磋<font color="#0000ff">鎴戜笉璁ゅ悓鐨勪袱涓?C++ 鏁欐潯錛?. 鐢╪ullptr鏇挎崲NULL錛?. 鐢╟stdio澶存枃浠舵浛鎹tdio.h銆?/font></p> <p>鍥犱負渚嬪 gettimeofday(&tv, NULL) 榪欑緋葷粺鍑芥暟浼犱釜 nullptr 榪涘幓瀹炲湪鏄繚鍜岋紝鐜板湪鐢?NULL 涔熻兘杈懼埌 nullptr 鐨勫ソ澶勶紝澶т笉浜嗗湪鏌愪釜澶存枃浠墮噷define涓涓嬪氨琛屻傝繖鏉″皢鏉ユ垨璁鎬細鍙樸?/p> <p>鍙﹀ ctime 澶存枃浠舵病瀹氫箟 std::gmtime_r錛岃?time.h 瀹氫箟浜?::gmtime_r銆傛垜鍙笉鎯沖幓鑳屽摢浜涘嚱鏁版槸 C 璇█鐨勫摢浜涙槸 Posix 鐨勶紝鍝簺澶存枃浠舵槸 C 璇█鐨勫摢浜涙槸 Posix 鐨勶紙鍦↙inux涓嬶紝浜岃呭熀鏈笉鍒嗗錛夈備負浜嗙敤鍑犱釜緋葷粺鍑芥暟錛堜緥濡?fcntl() 錛夛紝鎴戣 include cfcntl 榪樻槸 fcntl.h錛熺敤綰跨▼鏄?cpthread 榪樻槸 pthread.h錛熸垜鎬繪槸璁頒笉浣?memset() 鐨勫弬鏁伴『搴忥紝鍥犳涓鑸敤 bzero() 浠f浛錛屼絾鏄?manpage 璇?bzero() 澹版槑浜?strings.h錛岄偅鎴戣涓嶈鑰冭檻璇曡瘯 cstrings 鍛紵浣曞繀緇欒嚜宸辨壘楹葷儲錛孋++ 鏍囧噯搴撲箣澶栫殑鍐呭騫茶剢緇熶竴鐢?.h 澶存枃浠跺ソ浜嗐?/p> <p><font color="#0000ff">鎬ц兘浼樺寲錛?/font></p> <p>鏈変簺浜哄父甯告妸“鎬ц兘”鎸傚湪鍢磋竟錛岃屼笖鍏朵互“鎻愰珮鎬ц兘”涓虹悊鐢辯殑“浼樺寲鎺柦”寰寰涓嶅埌鐐瑰瓙涓婏紝鍙鍔犱簡澶嶆潅鎬у拰緇存姢闅懼害錛岄檷浣庝簡浠g爜璐ㄩ噺銆傝繖灞炰簬鍐崇瓥鐐規壘鍋忎簡銆傛垜鍙戠幇鍒濆鑰呭線寰榪囧垎鍏蟲敞寰錛堣鍙ョ駭錛夋ц兘錛屾瘮鏂硅鍏沖績 while(true) 鍜?for(;;) 鍝釜鏇村揩錛?+i 涓?i=i+1 鍝釜鏇村揩錛宨/=16 鍜?i >>= 4 鍝釜蹇瓑絳夛紝鑰屽拷瑙嗕簡鐜頒唬緙栬瘧鍣ㄧ殑浼樺寲鑳藉姏銆?/p> <p>鏈夌殑浜鴻皥鎬ц兘浼樺寲錛屼竴鏄嬁涓嶅嚭鍏蜂綋鐨勫悎鐞嗙殑鎬ц兘鐩爣錛屽彧鎯寵秺蹇秺濂斤紝浜屾槸涓嶈兘瀹為檯鍑嗙‘嫻嬮噺楠岃瘉鎬ц兘鏁版嵁錛屽嚟鎰熻鍜岃繃鏃剁粡楠岃浜嬨傚湪緙栫爜鐨勬椂鍊欙紝閬囧埌涓ょ鍋氭硶閮藉彲琛岋紝鍐崇瓥鍔炴硶鏄嚟鎰熻鐚滈?#8220;鎬ц兘浼氭洿濂?#8221;鐨勪竴縐嶏紝鑰屽拷瑙嗕簡鍏朵粬鏇撮噸瑕佺殑鍥犵礌銆傚彲璇繪у拰鎬ц兘鐨勫吀鍨嬪叧緋誨涓嬪浘錛屾湁澶氬皯鍦哄悎鏄煎緱涓轟簡鎬ц兘鑰岀壓鐗蹭唬鐮佺殑鍙鎬у拰鍙淮鎶ゆу憿錛熸垜甯屾湜鑷繁鐨勪唬鐮佷綅浜庣 3 鍖猴紝鑰屼竴浜涗漢浠ヤ負鑷繁鐨勪唬鐮佹槸鍦ㄧ 4 鍖猴紝鍏跺疄鏄湪絎?1 鍖恒?/p> <p><img title="read-perf" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="read-perf" src="http://m.shnenglu.com/images/cppblog_com/Solstice/Windows-Live-Writer/C_1284B/read-perf_707d60fb-8d33-4cfd-b867-94f3d946d2f5.png" width="470" height="329" /></p> <p>鑳藉湪絎?4 鍖哄啓浠g爜鐨勪漢灞炰簬鍑ゆ瘺楹熻錛屾湁鏃跺欎綘璐瑰姴浼樺寲浜嗗崐澶╋紝緇撴灉鏂癈PU鍔犱簡鍑犳潯鎸囦護錛岀洿鎺ュ湪紜歡灞傞潰鎶婇棶棰樿В鍐充簡銆傜幇鍦ㄤ竴浜涗漢鍔ㄤ笉鍔ㄥ氨瑕佹尳璧瘋瀛愯嚜宸卞啓鍐呭瓨姹狅紝鍙風О鑳芥彁楂樻ц兘錛岀湡褰?Ulrich Drepper 鏄按璐э紵錛堜功絎?12.2.8 鑺?#8220;鏈夊繀瑕佽嚜琛屽畾鍒跺唴瀛樺垎閰嶅櫒鍚?#8221;錛変綘鎵撶畻濡備綍嫻嬭瘯鍐呭瓨鍒嗛厤鍣紙malloc錛夌殑鎬ц兘錛熸湁鍝簺鎸囨爣錛熸湁鍝簺褰卞搷鍥犵礌闇瑕佹帶鍒舵垨妯℃嫙錛堟瘮濡傜嚎紼嬫暟錛夛紵浣犵殑嫻嬭瘯緇撴灉鏄惁鍙嶆槧瀹為檯鍦烘櫙錛?/p> <p><font color="#0000ff">鏉傞」</font></p> <p>鏈変漢闂負浠涔堟垜璇?#8220;poco涓嶆槸鏈嶅姟绔疌++緗戠粶搴?#8221;錛?<a >http://www.oschina.net/question/12_120943</a> 錛夛紝铏界劧瀹冧篃鎻愪緵浜唕eactor錛熷洜涓哄畠鐨剅eactor鐢ㄧ殑鏄?Socket::select()錛岃櫧鐒跺悗鑰呭寘瑁呬簡epoll錛屼絾鐪嬪叾瀹炵幇灝辯煡閬擄紝瀹冩瘡嬈¤皟鐢ㄩ兘浼氬垱寤哄茍閿姣?epoll fd錛岀劧鍚庨噸寤烘暣涓獁atch list錛屾病鏈夊摢涓湇鍔$緗戠粶搴撲細榪欎箞鍋氥?br /></p><div>鍡紝涓栫晫涓婃湁涓ょ緗戠粶緙栫▼錛氱綉緇滅紪紼嬪拰Windows緗戠粶緙栫▼銆?/div><img src ="http://m.shnenglu.com/Solstice/aggbug/202489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Solstice/" target="_blank">闄堢</a> 2013-08-12 13:54 <a href="http://m.shnenglu.com/Solstice/archive/2013/08/12/202489.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆奓inux澶氱嚎紼嬫湇鍔$緙栫▼錛氫嬌鐢╩uduo C++緗戠粶搴撱嬩笂甯傚崐騫撮噸鍗頒袱嬈★紝鎬誨嵃鏁拌揪鍒頒簡9000鍐?/title><link>http://m.shnenglu.com/Solstice/archive/2013/07/17/201891.html</link><dc:creator>闄堢</dc:creator><author>闄堢</author><pubDate>Wed, 17 Jul 2013 03:17:00 GMT</pubDate><guid>http://m.shnenglu.com/Solstice/archive/2013/07/17/201891.html</guid><wfw:comment>http://m.shnenglu.com/Solstice/comments/201891.html</wfw:comment><comments>http://m.shnenglu.com/Solstice/archive/2013/07/17/201891.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://m.shnenglu.com/Solstice/comments/commentRss/201891.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Solstice/services/trackbacks/201891.html</trackback:ping><description><![CDATA[<p>銆奓inux澶氱嚎紼嬫湇鍔$緙栫▼錛氫嬌鐢╩uduo C++緗戠粶搴撱嬭繖鏈功鑷粖騫翠竴鏈堜笂甯備互鏉ワ紝鍗婂勾涔嬪唴宸茬粡閲嶅嵃涓ゆ錛堝姞涓婇鍗幫紝涓鍏辨槸涓夋鍗板埛錛夛紝鎬誨嵃鏁拌揪鍒頒簡9000鍐岋紝榪欏湪鎶鏈功閲屽凡緇忕畻鏄浉褰撲笉閿欑殑鎴愮嘩銆傛湰涔﹁喘涔版柟寮忚閰嶅緗戠珯 <a >http://chenshuo.com/book</a> 銆? </p><p>浠ヤ笅璋堜竴璋堣繖鏈功鐨勫啓浣滆儗鏅笌鍐呭鍙栬垗鐨勫師鍥犮? </p><p>鍙傚姞宸ヤ綔浠ユ潵錛屾垜緙栧啓騫剁淮鎶や簡鑻ュ共C++/Java澶氱嚎紼嬬綉緇滄湇鍔$▼搴忥紝榪欐湰涔︽葷粨浜嗘垜鍦ㄥ紑鍙戠淮鎶よ繖綾繪湇鍔$▼搴忔柟闈㈢殑緇忛獙銆傚伐浣滀腑錛屾垜娌℃湁鍐欒繃鍗曠嚎紼嬬殑緗戠粶鏈嶅姟紼嬪簭錛屾病鏈夊啓榪嘋璇█鐨勭綉緇滄湇鍔$▼搴忥紝涔熸病鏈夊啓榪囪繍琛屽湪Windows涓嬬殑緗戠粶鏈嶅姟紼嬪簭錛屽洜姝ゆ湰涔︿笉娑夊強榪欎簺鍐呭銆? </p><p>鍦?#8220;Linux鏈嶅姟绔紑鍙?#8221;榪欎竴鑳屾櫙涓嬶紝榪欐湰涔︿富瑕佽涓変釜鏂歸潰鐨勫唴瀹?a href="#_ftn1_3988" name="_ftnref1_3988">[1]</a>錛氱幇浠++銆佸綰跨▼銆佺綉緇滅紪紼嬶紝鍒嗗埆瀵瑰簲涔︾殑絎?銆?銆?閮ㄥ垎銆傝繖涓嶆槸涓鏈叆闂ㄤ功錛屾湰涔︾殑璇昏呭簲璇ュ湪浠ヤ笂涓夋柟闈㈠凡緇忓叿澶囩浉褰撶殑鍩虹<a href="#_ftn2_3988" name="_ftnref2_3988">[2]</a>錛氱綉緇滅紪紼嬫柟闈紝鑳借交鏉捐鎳?.1鑺傜殑涓や釜Python紼嬪簭錛汣++鏂歸潰錛屽12.8鑺傜殑浠g爜涓嶆劅鍒伴檶鐢燂紱澶氱嚎紼嬫柟闈紝鑳芥槑鐧界1绔犺瑙e喅浠涔堥棶棰樸? </p><p>絎?绔?#8220;鍒嗗竷寮忕郴緇熷伐紼嬪疄璺?#8221;璇︾粏浠嬬粛浜嗚繖鏈功鐨勫簲鐢ㄨ儗鏅紝鍗沖紑鍙戝叕鍙稿唴閮ㄧ殑鍒嗗竷寮忔湇鍔$郴緇燂紝涔︿腑鐨勫緢澶氬喅絳栵紙design decision錛夊拰鎶鏈彇鑸嶏紙trade-off錛夋槸鍦ㄨ繖涓搴旂敤鍦烘櫙涓嬪仛鍑虹殑銆備互涓嬫槸鍚勭珷鐩存帴鐨勪氦鍙夊紩鐢ㄥ叧緋誨浘錛堟病鏈夎綆楀紩鐢ㄦ鏁幫級錛屽叾涓0绔犳槸鍓嶈█錛屽瓧姣嶇珷鑺傛槸闄勫綍銆傚彲瑙佺9绔犳槸琚紩鐢ㄦ渶澶氱殑涓绔狅紝鏌愮鎰忎箟涓婂彲浠ヨ絎?绔犳棦鏄湰涔︾殑鍏堝喅鏉′歡錛屽張鏄湰涔︾殑緇堟瀬鐩爣銆傜敱浜庣珷鑺備箣闂村瓨鍦ㄤ紬澶氱殑浜ゅ弶寮曠敤錛屽幓鎺変換浣曚竴绔犻兘浼氱牬鍧忓唴瀹圭殑瀹屾暣鎬с? </p><p><img title="ref" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" alt="ref" src="http://m.shnenglu.com/images/cppblog_com/Solstice/WindowsLiveWriter/LinuxmuduoC_112D7/ref_3.png" border="0" height="782" width="819" /> </p><p>榪欐湰涔︾殑涔﹀悕鍘熸湰鎵撶畻鍙?#8220;Linux C++ 澶氱嚎紼嬬郴緇熺紪紼?#8221;銆傚啓瀹屼箣鍚庡彂鐜幫紝涓庡叾浠朥nix/Linux緋葷粺緙栫▼鏂歸潰鐨勪功涓嶅悓錛岃繖鏈功鏈夋槑紜殑搴旂敤鍦烘櫙錛屽洜姝ゅ彲浠ョ爫鎺夊緢澶氬唴瀹癸紝紿佸嚭閲嶇偣銆傜敋鑷沖彲浠ヨ鎴戜富瑕佽鍒殑涔︽病鏈夎鍒扮殑鍐呭銆傝繖涓嶆槸涓鏈潰闈勘鍒扮殑涔︼紝鍥犳鏈緇堢殑涔﹀悕涔熷氨涓嶅彨“緋葷粺緙栫▼”浜嗐? </p><p>鍚屾椂錛屾垜璁や負寰堝鏁欑涔︿笂浠嬬粛鐨勪竴浜涘仛娉曟槸榪囨椂鐨勶紙signal錛夛紝涓浜涙槸涓嶆帹鑽愪嬌鐢ㄧ殑錛堜粠澶栭儴緇堟綰跨▼銆乀CP OOB鏁版嵁錛夛紝涓浜涙槸澶у鏁版儏鍐典笅娌″繀瑕佷嬌鐢ㄧ殑錛堝唴瀛樻睜銆乴ock-free 緙栫▼錛夈備綔涓哄叏闈㈢殑鏁欐潗鍜屾墜鍐岋紝鎶婅繖浜涘唴瀹規斁榪涘幓鍙互鐞嗚В銆備絾鏄繖鏈功瀹氫綅鏄粡楠屾葷粨錛屾垜鐣ュ幓浜嗘暀縐戜功涓婇偅浜涘熀鏈敤涓嶅埌鐨勭煡璇嗙偣錛屼互鍏嶅枾瀹懼ず涓伙紝涔熷緩璁鑰呬笉瑕佹妸綺懼姏鑺卞湪閭d簺嬈¤闂涓娿? </p><ul> <li>榪欐湰涔︽病鏈夎姳寰堝ぇ鐨勭瘒騫呭幓璁瞫ignal錛岃屾槸鍦ㄧ4.10鑺傝鏄庡綰跨▼紼嬪簭涓嶈浣跨敤signal浣滀負IPC銆傚茍涓旓紝鍦╩uduo-protorpc鐨勭ず渚嬩腑緇欏嚭浜哃inux涓撴湁鐨剆ignalfd(2)鐨勭敤娉曪紝鍙互閬垮厤浼犵粺signal handler鐨勫父瑙侀櫡闃憋紝涔熸洿絎﹀悎UNIX鐨?#8220;everything is a file”鍝插銆傜4.4鑺傝鏄庝笉瑕佷粠澶栭儴緇堟綰跨▼錛屽洜姝や篃灝變笉蹇呭幓緇嗙┒Pthreads cancellation point浜嗐傚綰跨▼紼嬪簭鏈濂戒笉瑕乫ork()錛堢4.9鑺傦級銆? </li><li>榪欐湰涔︽病浠嬬粛daemon榪涚▼錛屾垜璁や負daemon鏄繃鏃剁殑鍋氭硶銆傚洜涓篸aemon榪涚▼鐨勭埗榪涚▼鏄痠nit(1)錛岄厤緗枃浠跺湪鏈満錛屼笉渚夸簬澶氭満緇熶竴鐩戞帶涓庣鐞嗭紙絎?.8鑺傦級銆傦紙娉細<span id="docs-internal-guid-2b7fe252-edc3-72f2-70b1-66266a658e79" style="font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" data-mce-style="font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">濡傛灉鏄涓夋柟鏍囧噯鐨勬湇鍔$▼搴忥紝鍙堜笉闇瑕佺粡甯稿崌綰ф垨鏀歸厤緗噸鍚紝騫朵笖涓鏃﹀穿婧冿紝閲嶅惎灝辮兘緇х畫鏈嶅姟錛岄偅涔堝仛鎴?daemon 璁﹊nit(1)鎺ョ鏄彲浠ョ殑錛屾瘮濡俷tpd銆乻shd絳夈傝繖閲岃皥鐨勬槸鑷繁寮鍙戠淮鎶ょ殑鏈嶅姟紼嬪簭銆?/span>錛夊彟澶栵紝Java/Python/Go鍐欑殑鏈嶅姟紼嬪簭浼間箮涔熸病鏈夊仛鎴恉aemon鐨勪範鎯紝C++紼嬪簭娌℃湁鐞嗙敱瑕佺壒孌婂寰呫傝ˉ鍏呬竴鐐癸紝Linux鐨勮繘紼嬬鐞嗘満鍒跺緢钀藉悗錛堜粠UNIX緇ф壙鑰屾潵錛夛紝瀛愯繘紼嬮鍑虹殑浜嬩歡鍙兘琚埗榪涚▼浠IGCHLD淇″彿鐨勬柟寮忔敹鍒幫紙鑰屼笖榪欎釜signal鍙兘涓㈠け錛夛紝kill(pid) 涔熷瓨鍦ㄥ緢澶歳ace condition錛堜綘鎬庝箞淇濊瘉pid鍦╧ill涔嬪墠鐨勪竴鐬棿榪樹唬琛ㄤ綘鎯砶ill鐨勯偅涓繘紼嬶紝鑰屼笉鏄竴涓柊鍚姩鐨勮繘紼嬶紵close(fd)灝變笉浼氭湁榪欑 race condition銆傦級銆傝繖浜涘洶闅懼湪鐢ㄦ埛鎬佹棤娉曞厠鏈嶏紝鍙兘淇敼鍐呮牳錛屽紩鍏ユ柊鐨勭郴緇熻皟鐢ㄦ墠鑳芥不鏈備緥濡?FreeBSD 9.0 寮曞叆浜?pdfork()/pdkill() 絳夛紝灝嗗瓙榪涚▼鍙樻垚鏂囦歡鎻忚堪絎︼紝榪欐牱灝辮兘鐢↖O浜嬩歡妗嗘灦緇熶竴澶勭悊浜嗭紝涔熺鍚圲NIX鐨?#8220;everything is a file”鍝插銆備絾鎰縇inux鍐呮牳涔熻兘灝藉揩寮曞叆綾諱技鐨勭郴緇熻皟鐢紝鍑忚交紼嬪簭鍛樼殑璐熸媴銆? </li><li>榪欐湰涔︽病鏈夎鍐呭瓨姹狅紝鑰屾槸璇存槑涓嶆槸姣忎釜紼嬪簭閮借鑷繁鍐欏唴瀛樻睜錛?#167;12.2.8錛夈傝繖鏈功涔熸病鏈夋妸“閬垮厤鍐呭瓨紕庣墖”鎸傚湪鍢磋竟錛岃屾槸璁鴻瘉涓轟粈涔堜竴鑸殑紼嬪簭涓嶅繀鍦ㄦ剰瀹冿紙§A.1.8錛夛紱 </li><li>榪欐湰涔﹀彧鍏蟲敞Linux錛屼笉鑰冭檻縐繪鎬с傚畠鎺ㄨ崘浣跨敤Linux涓撴湁鐨刧ettid()緋葷粺璋冪敤浣滀負綰跨▼鏍囪瘑錛堢4.3鑺傦級錛岃屼笉鏄敤pthread_self()銆? </li><li>榪欐湰涔︿笉璁睵OSIX涓簲鑺卞叓闂ㄧ殑瀹氭椂鍑芥暟錛岃屼笓璁茬敤Linux鐗規湁鐨則imerfd鏉ュ疄鐜伴珮綺懼害瀹氭椂錛?#167;7.8.2錛夛紝鍥犱負瀹冭兘鏂逛究鍦拌瀺鍏O浜嬩歡澶勭悊妗嗘灦銆俶uduo鐩存帴浣跨敤C++鏍囧噯搴撴潵綆$悊瀹氭椂鍣紝鑰屼笉鏄嚜宸卞疄鐜板皬欏跺爢(heap)錛岃繖鏍峰彲浠ョ畝鍖栧疄鐜幫紙§8.2.1錛夈? </li><li>榪欐湰涔﹀彧璁瞞utex鍜宑ondition variable浣滀負鏈鍩虹鐨勭嚎紼嬪悓姝ユ墜孌碉紙絎?绔狅級錛屽茍涓旀垜璁や負涓涓狢++澶氱嚎紼嬬▼搴忎唬鐮侀噷涓嶅簲璇ョ洿鎺ュ嚭鐜皃thread_mutex_lock涔嬬被鐨勫熀鏈琍threads璋冪敤銆傛湰涔﹁繘涓姝ュ緩璁彧浣跨敤闈為掑綊鐨刴utex錛?#167;2.1.1錛夛紝榪欎笌鏌愪簺緗戜笂鏂囩珷鐨勬帹鑽愭濂界浉鍙嶃傝繖鏈功絎?.3鑺傜敋鑷沖緩璁笉瑕佷嬌鐢ㄨ鍐欓攣鍜屼俊鍙烽噺錛坰emaphore錛夛紝鍥犱負涓鏄鏄撶敤閿欙紝浜屾槸涓嶈寰楄兘鎻愰珮鎬ц兘銆俶utex鍜宑ondition variable鏄畬澶囩殑錛岃兘瀹炵幇澶氱鏇存槗鐢ㄧ殑鍚屾璁炬柦錛屼緥濡侰ountDownLatch鍜孊lockingQueue銆?#167;12.8.3鐨勪唬鐮佸睍紺轟簡鐢˙lockingQueue鍜孴hreadPool鎺у埗騫跺彂搴︾殑鎵嬫硶錛屽仛鍒頒簡“No locks. No condition variables. No callbacks.” </li><li>榪欐湰涔︿笉璁瞝ock-free緙栫▼錛屽洜涓虹紪鍐欏彲闈犵殑lock-free浠g爜騫跺垎鏋愰獙璇佸叾姝g‘鎬х殑闅懼害榪滃ぇ浜庣紪鍐欐櫘閫氱殑浣跨敤mutex鍜宑ondition variable鐨勫綰跨▼浠g爜錛屽悗鑰呭凡緇忔湁浜嗙浉褰撴垚鐔熺殑鐞嗚鍜屽伐鍏楓傛垜璁や負lock-free涓嶆槸姣忎釜澶氱嚎紼嬬▼搴忓憳搴旇鎺屾彙鐨勬妧鏈紝瀹冩姇鍏ラ珮鑰岀敤澶勫皯錛屽彲浠ラ傚綋浜嗚В錛屼絾涓嶅煎緱姣忎釜浜洪兘鍘繪繁絀躲傚彧闇瑕佸皯鏁頒漢鐢ㄥ畠瀹炵幇灝佽濂界殑鏁版嵁緇撴瀯錛屽儚鎴戣繖鏍風殑鏅氫漢灝卞彲浠ュ彈鐩娿? </li><li>榪欐湰涔﹀彧璁睟SD Sockets浣滀負榪涚▼闂撮氫俊鐨勬墜孌碉紝騫朵笖鍙敤TCP闀胯繛鎺ワ紙§3.4錛夈傝繖鏍峰氨鐮嶆帀浜唒ipe銆丗IFO銆丳OSIX message queue銆乻hared memory銆丼TREAMS銆乁NIX domain socket絳夌瓑鍐呭錛屽洜涓哄畠浠兘鍙檺鏈満榪涚▼闂撮氫俊錛屾棤娉曟墿灞曞埌澶氭満銆? </li><li>緗戠粶緙栫▼鏂歸潰錛堢6銆?绔狅級錛岃繖鏈功涓嶈Sockets API鐨勫熀鏈敤娉曪紝鑰屼笖浠g爜涓篃涓嶄細鐩存帴浣跨敤瀹冧滑銆傛垜璁や負鍦ㄧ▼搴忎腑鐩存帴浣跨敤 Sockets API鏄垵瀛﹁呯殑鍋氭硶錛屽綋鍐欎竴涓柊緗戠粶鏈嶅姟紼嬪簭錛屽鏋滀竴寮濮嬭冭檻鐨勬槸鎬庝箞緇勭粐accept銆乺ead銆乪poll_wait絳夎皟鐢紝榪欑鍋氭硶鏃犲紓浜庣敤閾呯瑪鍒閿ぇ鏍戯紝浜嬪嶅姛鍗婏紝涔熶笉鍒╀簬灝嗘潵鐨勫姛鑳芥墿灞曞拰緇存姢銆傜◢寰儚鏍風偣鐨勫叕鍙擱兘浼氱敤鎴愮啛鐨勭綉緇滃簱錛堜笉涓瀹氬紑婧愶級錛屾妸緗戠粶緙栫▼鐨勫鏉傛у皝瑁呰繘鍘伙紝鏆撮湶鍑鴻壇濂芥槗鐢ㄧ殑鎺ュ彛錛岃寮鍙戜漢鍛樹嬌鐢ㄦ洿楂樺眰鐨刡uilding blocks錛堟秷鎭紶閫掓垨RPC錛変粠鍔熻兘鐨勮搴﹀幓璁捐紼嬪簭錛岄伩鍏嶄竴嬈℃鍙嶅鎺夊埌TCP緗戠粶緙栫▼鐨勫潙閲屻傚涓湇鍔$▼搴忓叡浜浉鍚岀殑鍩虹搴撳拰浜嬩歡澶勭悊妗嗘灦鐨勭泭澶勬槸鏄捐屾槗瑙佺殑錛屼竴鏂歸潰鎶婄綉緇滅紪紼嬬殑澶嶆潅鎬ч泦涓埌涓璧鳳紝閬垮厤姣忎釜鍥㈤槦閮藉幓韙忎竴閬嶅潙錛涘彟涓鏂歸潰錛屽熀紜搴撶殑bug淇涓庢ц兘浼樺寲鑳芥儬鍙婄敤鍒板畠鐨勫叏閮ㄦ湇鍔$▼搴忥紱鏈鍚庯紝紼嬪簭緇撴瀯涓婄殑鐩鎬技鎬ц緙栫▼緇忛獙鏇村姞閫氱敤錛屽涓湇鍔$▼搴忓湪鍔熻兘銆佹ц兘銆佹紜х瓑鏂歸潰鍏鋒湁鍏辨э紝鑳戒婦涓鍙嶄笁瑙︾被鏃侀氾紝闄嶄綆灝嗘潵寮鍙戠淮鎶ょ殑鎴愭湰銆傚簲璇ラ伩鍏嶆瘡涓▼搴忛兘鍙﹁搗鐐夌伓錛屽崟鐙璁″叾IO浜嬩歡澶勭悊緇撴瀯銆? </li><li>榪欐湰涔﹀彧璁查潪闃誨IO緇撳悎IO澶嶇敤錛圛O-Multiplexing錛夎繖涓縐嶅茍鍙戦鏍鹼紙褰掔撼涓轟笁涓崐浜嬩歡錛夛紝騫朵粙緇嶅湪澶氱嚎紼嬩笅鐨勬墿灞曪紙one loop per thread錛夈侷O澶嶇敤鏂歸潰錛屾湰涔﹀彧璁瞝evel-trigger錛屼笉璁瞖dge-trigger銆備竴鏂歸潰鐩墠娌℃湁up to date鐨勬祴璇曡〃鏄嶦T鏇村揩錛岀浉鍙嶏紝鎴戣涓篖T鍦ㄨ鍙栨暟鎹椂鍙互鑺傜害涓嬈ead()璋冪敤錛?#167;8.7.2錛夛紱鍙︿竴鏂歸潰錛孡T妯″紡鏇村鏄撲笌鍏朵粬絎笁鏂瑰簱緇撳悎錛?#167;7.15錛夈傚綰跨▼紼嬪簭綆$悊騫跺彂socket fd鏈夊緢澶氶鏍煎彲渚涢夋嫨錛屼緥濡俥poll fd鏄涓嚎紼嬪叡浜竴涓紙澶氬涓錛夎繕鏄瘡涓嚎紼嬫湁鑷繁鐨別poll fd錛堜竴瀵逛竴錛夛紝姣忎釜socket fd鏄彧灞炰簬涓涓猠poll fd錛堝瀵逛竴錛夎繕鏄彲浠ュ悓鏃跺睘浜庡涓?epoll fd錛堝瀵瑰錛夛紝姣忎釜socket fd鏄彧鑳借鍥哄畾鐨勪竴涓嚎紼嬭鍐欒繕鏄彲浠ヨ澶氫釜綰跨▼璇誨啓錛堝鏋滄槸鍚庤咃紝閭d箞璇誨啓鐨勬椂鍊欐槸鍔犻攣榪樻槸浣跨敤ONESHOT錛夈備互涓婁笉鏄瘡縐嶉兘鍙錛屾湰涔︿篃娌℃湁涓涓鍔犱互鍒嗘瀽錛岃屾槸寤鴻浣跨敤one loop per thread榪欑閫傜敤鎬ц緝寮虹殑椋庢牸錛岄鍏堟槸姝g‘鎬у鏄撻獙璇侊紝鍏舵鏄ц兘涔熻兘婊¤凍瑕佹眰銆? </li><li>鏈功涓嶈IPv6錛屽洜涓虹洰鍓嶄笘鐣屼笂鏈澶х殑鍏徃鐨勬湇鍔℃満緹や篃鐢ㄤ笉瀹屼竴涓鏈堿綾誨湴鍧錛?0.0.0.0/8錛夈傛湰涔︿笉璁睻DP錛屽洜涓恒奤nix緗戠粶緙栫▼銆嬪凡緇忚寰楀緢濂戒簡銆? </li><li>榪欐湰涔︿婦鐨勭綉緇滅紪紼嬬殑渚嬪瓙涓嶅啀鏄畝鍗曠殑echo鏈嶅姟錛岃屾槸鏈夋牸寮忥紙鍥犳寮曞叆codec錛夈佸榪炴帴涔嬮棿浼氫氦鎹㈡暟鎹殑緗戠粶紼嬪簭錛屾洿鎺ヨ繎涓氬姟鍦烘櫙錛屼篃鍊熸満璁茶В濡備綍閬垮厤TCP緗戠粶緙栫▼鐨勫父瑙侀櫡闃便傚茍涓斿湪紺轟緥浠g爜涓粰鍑轟簡鍒嗗竷寮忓崟璇嶈鏁般佸鏈烘眰涓綅鏁扮瓑紼嶅井澶嶆潅涓鐐圭殑紼嬪簭銆? </li><li>鍦–++鏂歸潰錛岃繖鏈功娌℃湁浠嬬粛鍔ㄦ侀摼鎺ュ簱鐑洿鏂拌繖縐?#8220;楂樼駭”鎶鏈紝鑰屾槸璇存槑錛屽湪鍒嗗竷寮忕郴緇熶腑錛屼負浜嗛儴緗叉柟渚匡紝搴旇浠庢簮鐮佺紪璇戝叏閮ㄧ殑搴擄紝涓庝富紼嬪簭閾炬帴涓轟竴涓猻tandalone鐨勫彲鎵ц鏂囦歡錛屼互鍑忓皬瀵硅繍琛岀幆澧冪殑渚濊禆錛堢10绔狅級銆傜11绔犺繕璁ㄨ浜嗙▼搴忓簱涓庡簲鐢ㄧ▼搴忎箣闂寸殑鎺ュ彛璁捐銆?/li></ul> <p>“淇℃伅”鎸夌収棣欏啘鐨勫畾涔夛紝鏄?#8220;鍑忓皯涓嶇‘瀹氭?#8221;錛岃繖鏈功鍖呭惈鐨勪俊鎭鏄噺灝戦夌敤緙栫▼璁炬柦錛坒acilities錛夋柟闈㈢殑涓嶇‘瀹氭э紝璁╄鑰呴泦涓簿鍔涙敾鍏嬫湰璐ㄩ棶棰樸傝繖鏈功浠嬬粛鐨勬柟娉曚笉涓瀹氬浜庢瘡涓簲鐢ㄥ満鏅兘鏄渶濂界殑錛屼絾鑲畾鏄畝渚挎槗琛岀殑錛屾槸鏃墮棿鎴愭湰銆佸姛鑳姐佹ц兘鐨勪竴縐嶅悎鐞嗘姌涓? </p><hr size="1" width="33%" align="left" /> <p><a href="#_ftnref1_3988" name="_ftn1_3988">[1]</a> 榪欐湰涔﹀墠璦鐨勭涓鍙ヨ瘽“鏈功涓昏璁茶堪閲囩敤鐜頒唬 C++ 鍦?x86-64 Linux 涓婄紪鍐欏綰跨▼ TCP 緗戠粶鏈嶅姟紼嬪簭鐨勪富嫻佸父瑙勬妧鏈?#8221;錛屽皝闈㈠嵃鐫“紺鴻寖鍦ㄥ鏍告椂浠i噰鐢ㄧ幇浠?C++ 緙栧啓澶氱嚎紼?TCP 緗戠粶鏈嶅姟鍣ㄧ殑姝h鍋氭硶”銆? </p><p><a href="#_ftnref2_3988" name="_ftn2_3988">[2]</a> 鍓嶈█鍐欏埌錛氳鑰呭簲璇ュ凡緇忓ぇ鑷磋榪囥婄幇浠f搷浣滅郴緇熴嬨併奤NIX 鐜楂樼駭緙栫▼銆嬨併奤NIX 緗戠粶緙栫▼銆嬨併奀++ Primer銆嬫垨涓庝箣鍐呭鐩歌繎鐨勪功綾嶏紝鐔熸倝鍩烘湰姒傚康錛屽茍鎺屾彙 Pthreads 鍜?Sockets API 鐨勫父瑙勭敤娉曘? </p><img src ="http://m.shnenglu.com/Solstice/aggbug/201891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Solstice/" target="_blank">闄堢</a> 2013-07-17 11:17 <a href="http://m.shnenglu.com/Solstice/archive/2013/07/17/201891.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>涓轟粈涔堝綰跨▼璇誨啓 shared_ptr 瑕佸姞閿侊紵http://m.shnenglu.com/Solstice/archive/2013/01/28/197597.html闄堢闄堢Sun, 27 Jan 2013 21:15:00 GMThttp://m.shnenglu.com/Solstice/archive/2013/01/28/197597.htmlhttp://m.shnenglu.com/Solstice/comments/197597.htmlhttp://m.shnenglu.com/Solstice/archive/2013/01/28/197597.html#Feedback7http://m.shnenglu.com/Solstice/comments/commentRss/197597.htmlhttp://m.shnenglu.com/Solstice/services/trackbacks/197597.html闄堢錛坓iantchen_AT_gmail_DOT_com錛?/p>

2012-01-28

鎴戝湪銆奓inux 澶氱嚎紼嬫湇鍔$緙栫▼錛氫嬌鐢?muduo C++ 緗戠粶搴撱嬬 1.9 鑺?#8220;鍐嶈 shared_ptr 鐨勭嚎紼嬪畨鍏?#8221;涓啓閬擄細

錛坰hared_ptr錛夌殑寮曠敤璁℃暟鏈韓鏄畨鍏ㄤ笖鏃犻攣鐨勶紝浣嗗璞$殑璇誨啓鍒欎笉鏄紝鍥犱負 shared_ptr 鏈変袱涓暟鎹垚鍛橈紝璇誨啓鎿嶄綔涓嶈兘鍘熷瓙鍖栥?/font>鏍規嵁鏂囨。錛?/font>http://www.boost.org/doc/libs/release/libs/smart_ptr/shared_ptr.htm#ThreadSafety錛夛紝 shared_ptr 鐨勭嚎紼嬪畨鍏ㄧ駭鍒拰鍐呭緩綾誨瀷銆佹爣鍑嗗簱瀹瑰櫒銆乻td::string 涓鏍鳳紝鍗籌細

• 涓涓?shared_ptr 瀵硅薄瀹炰綋鍙澶氫釜綰跨▼鍚屾椂璇誨彇錛堟枃妗d緥1錛夛紱

• 涓や釜 shared_ptr 瀵硅薄瀹炰綋鍙互琚袱涓嚎紼嬪悓鏃跺啓鍏ワ紙渚?錛夛紝“鏋愭瀯”綆楀啓鎿嶄綔錛?/font>

濡傛灉瑕佷粠澶氫釜綰跨▼璇誨啓鍚屼竴涓?shared_ptr 瀵硅薄錛岄偅涔堥渶瑕佸姞閿侊紙渚?~5錛夈?/font>

璇鋒敞鎰忥紝浠ヤ笂鏄?shared_ptr 瀵硅薄鏈韓鐨勭嚎紼嬪畨鍏ㄧ駭鍒紝涓嶆槸瀹冪鐞嗙殑瀵硅薄鐨勭嚎紼嬪畨鍏ㄧ駭鍒?/font>

鍚庢枃錛坧.18錛夊垯浠嬬粛濡備綍楂樻晥鍦板姞閿佽В閿併傛湰鏂囧垯鍏蜂綋鍒嗘瀽涓涓嬩負浠涔?#8220;鍥犱負 shared_ptr 鏈変袱涓暟鎹垚鍛橈紝璇誨啓鎿嶄綔涓嶈兘鍘熷瓙鍖?/font>”浣垮緱澶氱嚎紼嬭鍐欏悓涓涓?shared_ptr 瀵硅薄闇瑕佸姞閿?/font>銆傝繖涓湪鎴戠湅鏉ユ樉鑰屾槗瑙佺殑緇撹浼間箮涔熸湁浜烘姳鏈夌枒闂紝閭e皢瀵艱嚧鐏鵑毦鎬х殑鍚庢灉銆傛湰鏂囦互 boost::shared_ptr 涓轟緥錛屼笌 std::shared_ptr 鍙兘鐣ユ湁鍖哄埆銆?/p>

shared_ptr 鐨勬暟鎹粨鏋?/h1>

shared_ptr 鏄紩鐢ㄨ鏁板瀷錛坮eference counting錛夋櫤鑳芥寚閽堬紝鍑犱箮鎵鏈夌殑瀹炵幇閮介噰鐢ㄥ湪鍫嗭紙heap錛変笂鏀句釜璁℃暟鍊鹼紙count錛夌殑鍔炴硶錛堥櫎姝や箣澶栫悊璁轟笂榪樻湁鐢ㄥ驚鐜摼琛ㄧ殑鍔炴硶錛屼笉榪囨病鏈夊疄渚嬶級銆傚叿浣撴潵璇達紝shared_ptr<Foo> 鍖呭惈涓や釜鎴愬憳錛屼竴涓槸鎸囧悜 Foo 鐨勬寚閽?ptr錛屽彟涓涓槸 ref_count 鎸囬拡錛堝叾綾誨瀷涓嶄竴瀹氭槸鍘熷鎸囬拡錛屾湁鍙兘鏄?class 綾誨瀷錛屼絾涓嶅獎鍝嶈繖閲岀殑璁ㄨ錛夛紝鎸囧悜鍫嗕笂鐨?ref_count 瀵硅薄銆俽ef_count 瀵硅薄鏈夊涓垚鍛橈紝鍏蜂綋鐨勬暟鎹粨鏋勫鍥?1 鎵紺猴紝鍏朵腑 deleter 鍜?allocator 鏄彲閫夌殑銆?/p>

sp0

鍥?1錛歴hared_ptr 鐨勬暟鎹粨鏋勩?/p>

涓轟簡綆鍖栧茍紿佸嚭閲嶇偣錛屽悗鏂囧彧鐢誨嚭 use_count錛?/p>

sp1

浠ヤ笂鏄?shared_ptr<Foo> x(new Foo); 瀵瑰簲鐨勫唴瀛樻暟鎹粨鏋勩?/p>

濡傛灉鍐嶆墽琛?shared_ptr<Foo> y = x; 閭d箞瀵瑰簲鐨勬暟鎹粨鏋勫涓嬨?/p>

sp2

浣嗘槸 y=x 娑夊強涓や釜鎴愬憳鐨勫鍒訛紝榪欎袱姝ユ嫹璐濅笉浼氬悓鏃訛紙鍘熷瓙錛夊彂鐢熴?/p>

涓棿姝ラ 1錛屽鍒?ptr 鎸囬拡錛?/p>

sp3

涓棿姝ラ 2錛屽鍒?ref_count 鎸囬拡錛屽鑷村紩鐢ㄨ鏁板姞 1錛?/p>

sp4

姝ラ1鍜屾楠?鐨勫厛鍚庨『搴忚窡瀹炵幇鐩稿叧錛堝洜姝ゆ楠?2 閲屾病鏈夌敾鍑?y.ptr 鐨勬寚鍚戯級錛屾垜瑙佽繃鐨勯兘鏄厛1鍚?銆?/p>

鏃㈢劧 y=x 鏈変袱涓楠わ紝濡傛灉娌℃湁 mutex 淇濇姢錛岄偅涔堝湪澶氱嚎紼嬮噷灝辨湁 race condition銆?/p>

澶氱嚎紼嬫棤淇濇姢璇誨啓 shared_ptr 鍙兘鍑虹幇鐨?race condition

鑰冭檻涓涓畝鍗曠殑鍦烘櫙錛屾湁 3 涓?shared_ptr<Foo> 瀵硅薄 x銆乬銆乶錛?/p>

  • shared_ptr<Foo> g(new Foo); // 綰跨▼涔嬮棿鍏變韓鐨?shared_ptr
  • shared_ptr<Foo> x; // 綰跨▼ A 鐨勫眬閮ㄥ彉閲?/li>
  • shared_ptr<Foo> n(new Foo); // 綰跨▼ B 鐨勫眬閮ㄥ彉閲?/li>

涓寮濮嬶紝鍚勫畨鍏朵簨銆?/p>

sp5

綰跨▼ A 鎵ц x = g; 錛堝嵆 read g錛夛紝浠ヤ笅瀹屾垚浜嗘楠?1錛岃繕娌℃潵鍙婃墽琛屾楠?2銆傝繖鏃跺垏鎹㈠埌浜?B 綰跨▼銆?/p>

sp6

鍚屾椂緙栫▼ B 鎵ц g = n; 錛堝嵆 write G錛夛紝涓や釜姝ラ涓璧峰畬鎴愪簡銆?/p>

鍏堟槸姝ラ 1錛?/p>

sp7

鍐嶆槸姝ラ 2錛?/p>

sp8

榪欐槸 Foo1 瀵硅薄宸茬粡閿姣侊紝x.ptr 鎴愪簡絀烘偓鎸囬拡錛?/p>

鏈鍚庡洖鍒扮嚎紼?A錛屽畬鎴愭楠?2錛?/p>

sp9

澶氱嚎紼嬫棤淇濇姢鍦拌鍐?g錛岄犳垚浜?#8220;x 鏄┖鎮寚閽?#8221;鐨勫悗鏋溿傝繖姝f槸澶氱嚎紼嬭鍐欏悓涓涓?shared_ptr 蹇呴』鍔犻攣鐨勫師鍥犮?/p>

褰撶劧錛宺ace condition 榪滀笉姝㈣繖涓縐嶏紝鍏朵粬綰跨▼浜ょ粐錛坕nterweaving錛夋湁鍙兘浼氶犳垚鍏朵粬閿欒銆?/p>

鎬濊冿紝鍋囧 shared_ptr 鐨?operator= 瀹炵幇鏄厛澶嶅埗 ref_count錛堟楠?2錛夊啀澶嶅埗 ptr錛堟楠?1錛夛紝浼氭湁鍝簺 race condition錛?/p>

鏉傞」

shared_ptr 浣滀負 unordered_map 鐨?key

濡傛灉鎶?boost::shared_ptr 鏀懼埌 unordered_set 涓紝鎴栬呯敤浜?unordered_map 鐨?key錛岄偅涔堣灝忓績 hash table 閫鍖栦負閾捐〃銆?a title="http://stackoverflow.com/questions/6404765/c-shared-ptr-as-unordered-sets-key/12122314#12122314" >http://stackoverflow.com/questions/6404765/c-shared-ptr-as-unordered-sets-key/12122314#12122314

鐩村埌 Boost 1.47.0 鍙戝竷涔嬪墠錛寀nordered_set<std::shared_ptr<T> > 铏界劧鍙互緙栬瘧閫氳繃錛屼絾鏄叾 hash_value 鏄?shared_ptr 闅愬紡杞崲涓?bool 鐨勭粨鏋溿備篃灝辨槸璇達紝濡傛灉涓嶈嚜瀹氫箟hash鍑芥暟錛岄偅涔?unordered_{set/map} 浼氶鍖栦負閾捐〃銆?a title="https://svn.boost.org/trac/boost/ticket/5216" >https://svn.boost.org/trac/boost/ticket/5216

Boost 1.51 鍦?boost/functional/hash/extensions.hpp 涓鍔犱簡鏈夊叧閲嶈澆錛岀幇鍦ㄥ彧瑕佸寘鍚繖涓ご鏂囦歡灝辮兘瀹夊叏楂樻晥鍦頒嬌鐢?unordered_set<std::shared_ptr> 浜嗐?/p>

榪欎篃鏄?muduo 鐨?examples/idleconnection 紺轟緥瑕佽嚜宸卞畾涔?hash_value(const boost::shared_ptr<T>& x) 鍑芥暟鐨勫師鍥狅紙涔︾ 7.10.2 鑺傦紝p.255錛夈傚洜涓?Debian 6 Squeeze銆乁buntu 10.04 LTS 閲岀殑 boost 鐗堟湰閮芥湁榪欎釜 bug銆?/p>

涓轟粈涔堝浘 1 涓殑 ref_count 涔熸湁鎸囧悜 Foo 鐨勬寚閽堬紵

shared_ptr<Foo> sp(new Foo) 鍦ㄦ瀯閫?sp 鐨勬椂鍊欐崟鑾蜂簡 Foo 鐨勬瀽鏋勮涓恒傚疄闄呬笂 shared_ptr.ptr 鍜?ref_count.ptr 鍙互鏄笉鍚岀殑綾誨瀷錛堝彧瑕佸畠浠箣闂村瓨鍦ㄩ殣寮忚漿鎹級錛岃繖鏄?shared_ptr 鐨勪竴澶у姛鑳姐傚垎 3 鐐規潵璇達細

1. 鏃犻渶铏氭瀽鏋勶紱鍋囪 Bar 鏄?Foo 鐨勫熀綾伙紝浣嗘槸 Bar 鍜?Foo 閮芥病鏈夎櫄鏋愭瀯銆?/p>

shared_ptr<Foo> sp1(new Foo); // ref_count.ptr 鐨勭被鍨嬫槸 Foo*

shared_ptr<Bar> sp2 = sp1; // 鍙互璧嬪鹼紝鑷姩鍚戜笂杞瀷錛坲p-cast錛?/p>

sp1.reset(); // 榪欐椂 Foo 瀵硅薄鐨勫紩鐢ㄨ鏁伴檷涓?1

姝ゅ悗 sp2 浠嶇劧鑳藉畨鍏ㄥ湴綆$悊 Foo 瀵硅薄鐨勭敓鍛芥湡錛屽茍瀹夊叏瀹屾暣鍦伴噴鏀?Foo錛屽洜涓哄叾 ref_count 璁頒綇浜?Foo 鐨勫疄闄呯被鍨嬨?/p>

2. shared_ptr<void> 鍙互鎸囧悜騫跺畨鍏ㄥ湴綆$悊錛堟瀽鏋勬垨闃叉鏋愭瀯錛変換浣曞璞★紱muduo::net::Channel class 鐨?tie() 鍑芥暟灝變嬌鐢ㄤ簡榪欎竴鐗規э紝闃叉瀵硅薄榪囨棭鏋愭瀯錛岃涔?7.15.3 鑺傘?/p>

shared_ptr<Foo> sp1(new Foo); // ref_count.ptr 鐨勭被鍨嬫槸 Foo*

shared_ptr<void> sp2 = sp1; // 鍙互璧嬪鹼紝Foo* 鍚?void* 鑷姩杞瀷

sp1.reset(); // 榪欐椂 Foo 瀵硅薄鐨勫紩鐢ㄨ鏁伴檷涓?1

姝ゅ悗 sp2 浠嶇劧鑳藉畨鍏ㄥ湴綆$悊 Foo 瀵硅薄鐨勭敓鍛芥湡錛屽茍瀹夊叏瀹屾暣鍦伴噴鏀?Foo錛屼笉浼氬嚭鐜?delete void* 鐨勬儏鍐碉紝鍥犱負 delete 鐨勬槸 ref_count.ptr錛屼笉鏄?sp2.ptr銆?/p>

3. 澶氱戶鎵褲?/strong>鍋囪 Bar 鏄?Foo 鐨勫涓熀綾諱箣涓錛岄偅涔堬細

shared_ptr<Foo> sp1(new Foo);

shared_ptr<Bar> sp2 = sp1; // 榪欐椂 sp1.ptr 鍜?sp2.ptr 鍙兘鎸囧悜涓嶅悓鐨勫湴鍧錛屽洜涓?Bar subobject 鍦?Foo object 涓殑 offset 鍙兘涓嶄負0銆?/p>

sp1.reset(); // 姝ゆ椂 Foo 瀵硅薄鐨勫紩鐢ㄨ鏁伴檷涓?1

浣嗘槸 sp2 浠嶇劧鑳藉畨鍏ㄥ湴綆$悊 Foo 瀵硅薄鐨勭敓鍛芥湡錛屽茍瀹夊叏瀹屾暣鍦伴噴鏀?Foo錛屽洜涓?delete 鐨勪笉鏄?Bar*錛岃屾槸鍘熸潵鐨?Foo*銆傛崲鍙ヨ瘽璇達紝sp2.ptr 鍜?ref_count.ptr 鍙兘鍏鋒湁涓嶅悓鐨勫鹼紙褰撶劧瀹冧滑鐨勭被鍨嬩篃涓嶅悓錛夈?/p>

涓轟粈涔堣灝介噺浣跨敤 make_shared()錛?/h2>

涓轟簡鑺傜渷涓嬈″唴瀛樺垎閰嶏紝鍘熸潵 shared_ptr<Foo> x(new Foo); 闇瑕佷負 Foo 鍜?ref_count 鍚勫垎閰嶄竴嬈″唴瀛橈紝鐜板湪鐢?make_shared() 鐨勮瘽錛屽彲浠ヤ竴嬈″垎閰嶄竴鍧楄凍澶熷ぇ鐨勫唴瀛橈紝渚?Foo 鍜?ref_count 瀵硅薄瀹硅韓銆傛暟鎹粨鏋勬槸錛?/p>

sp10

涓嶈繃 Foo 鐨勬瀯閫犲嚱鏁板弬鏁拌浼犵粰 make_shared()錛屽悗鑰呭啀浼犵粰 Foo::Foo()錛岃繖鍙湁鍦?C++11 閲岄氳繃 perfect forwarding 鎵嶈兘瀹岀編瑙e喅銆?/p>

(.瀹?)



闄堢 2013-01-28 05:15 鍙戣〃璇勮
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              久久久久久午夜| 欧美在线视频日韩| 国产老肥熟一区二区三区| 欧美日韩精品一区| 欧美日韩精品一二三区| 久久国产欧美精品| 欧美诱惑福利视频| 亚洲美女色禁图| 在线视频欧美精品| 销魂美女一区二区三区视频在线| 久久福利毛片| 欧美电影打屁股sp| 亚洲免费观看| 欧美一区二区三区另类| 裸体女人亚洲精品一区| 欧美日韩在线一区二区三区| 国产一区二区按摩在线观看| 亚洲精品一级| 久久野战av| aⅴ色国产欧美| 久久久一区二区三区| 欧美亚一区二区| 在线观看亚洲| 欧美亚洲综合另类| 亚洲欧洲一区二区天堂久久 | 老司机免费视频一区二区| 欧美成人一区二免费视频软件| 欧美性事免费在线观看| 亚洲国产精品成人综合色在线婷婷| 99国产精品自拍| 另类酷文…触手系列精品集v1小说| 亚洲精品一区二区三区99| 久久久久五月天| 国产精品一区二区男女羞羞无遮挡 | 欧美国产日本韩| 亚洲午夜电影网| 欧美成人午夜影院| 一色屋精品视频在线看| 欧美一级黄色网| 日韩亚洲欧美成人一区| 欧美成人在线影院| 亚洲第一级黄色片| 欧美在线一区二区| 亚洲视频二区| 欧美日韩精品一区二区三区| 亚洲国产美女| 欧美激情久久久久久| 久久久噜噜噜久久| 国产专区综合网| 久久精品国产一区二区电影| 亚洲欧美精品在线| 国产欧美日韩亚州综合| 欧美一区二区三区在线视频| 亚洲女性裸体视频| 国产日韩欧美三级| 久久久久国产一区二区三区四区| 亚洲一区二区三区成人在线视频精品 | 午夜久久美女| 国产乱人伦精品一区二区 | 亚洲精品久久久久久久久久久久久 | 欧美一区二区视频观看视频| 国产精品一区久久| 久久精品国产99| 欧美伊人久久大香线蕉综合69| 国产视频一区在线观看| 久久亚洲二区| 久久一区二区三区四区五区| 亚洲电影免费观看高清完整版在线观看 | 亚洲日本中文字幕区| 亚洲国产成人在线| 欧美日韩中文字幕日韩欧美| 亚洲欧美国产日韩天堂区| 亚洲一区二区三区欧美| 国内一区二区三区| 欧美成人国产一区二区| 欧美激情国产日韩| 亚洲欧美日韩区| 亚欧美中日韩视频| 亚洲国产视频一区二区| 99热免费精品| 国产一区二区黄色| 欧美波霸影院| 国产精品高潮久久| 久久综合导航| 欧美激情五月| 久久精彩视频| 欧美激情一区二区三区蜜桃视频| 一本久久知道综合久久| 午夜久久黄色| 亚洲精品在线一区二区| 亚洲一区在线免费观看| 亚洲成色777777在线观看影院| 亚洲乱码国产乱码精品精| 国自产拍偷拍福利精品免费一| 亚洲欧洲精品天堂一级| 国户精品久久久久久久久久久不卡| 欧美高清在线一区| 国产乱码精品| 亚洲乱码国产乱码精品精天堂| 激情成人中文字幕| 一区二区三区导航| 亚洲国产美女久久久久| 性久久久久久| 亚洲天堂网站在线观看视频| 久久影院午夜论| 久久精品中文字幕免费mv| 欧美日韩亚洲一区三区| 欧美jizzhd精品欧美巨大免费| 国产精品久久久久91| 亚洲国产精品国自产拍av秋霞| 国产婷婷97碰碰久久人人蜜臀| 亚洲黄色大片| 欧美精品乱人伦久久久久久 | 欧美成人午夜视频| 国产精品三级视频| aa成人免费视频| 一区二区欧美视频| 欧美成人精品一区二区| 久久综合九色综合欧美就去吻| 国产精品久久久久久久久免费 | 久久精品国产在热久久| 国产精品久久久久久一区二区三区| 亚洲福利一区| 在线欧美三区| 久久精品主播| 久久久国产视频91| 国产一区二区三区av电影| 午夜精品久久久久久久99樱桃| 亚洲网址在线| 欧美日韩久久精品| 亚洲精品国产精品国自产观看| 亚洲精品社区| 欧美日本韩国一区| 亚洲精品护士| 宅男噜噜噜66一区二区66| 欧美日韩国产综合久久| 亚洲精品日韩欧美| 国产精品99久久不卡二区| 欧美日韩国产一级片| 一本大道久久a久久精二百| 亚洲午夜国产一区99re久久| 欧美视频在线播放| 亚洲欧美另类在线观看| 久久琪琪电影院| 亚洲黄一区二区三区| 欧美成年人在线观看| 日韩亚洲精品视频| 欧美亚洲综合久久| 亚洲电影在线看| 欧美日韩亚洲一区二区| 亚洲欧美日韩在线| 暖暖成人免费视频| 一区二区三区日韩欧美| 国产日产亚洲精品| 欧美va亚洲va国产综合| 99精品国产99久久久久久福利| 亚洲欧美在线看| 亚洲国产精品成人精品| 国产精品久久久久91| 久久精品国产亚洲一区二区| 亚洲高清二区| 欧美一级久久| 亚洲人成久久| 国产精品视频成人| 免费成人激情视频| 亚洲欧美日韩精品久久久| 欧美成人在线网站| 亚洲嫩草精品久久| 亚洲电影观看| 国产精品视频免费一区| 久久伊人亚洲| 亚洲一二三区在线观看| 蜜臀99久久精品久久久久久软件| 一区二区三区日韩欧美| 精品成人一区二区三区| 国产精品成人av性教育| 一色屋精品视频在线看| 欧美日本网站| 久久精品91久久久久久再现| 亚洲精品少妇| 久久在线免费| 亚洲女女做受ⅹxx高潮| 伊大人香蕉综合8在线视| 欧美午夜在线视频| 蜜桃久久av一区| 欧美亚洲日本一区| 日韩天堂av| 欧美国产日韩二区| 久久精品在线播放| 亚洲女同在线| 在线综合亚洲| 99精品欧美一区二区蜜桃免费| 狠狠色丁香久久综合频道| 国产精品高清一区二区三区| 欧美精品97| 欧美顶级少妇做爰| 欧美91视频| 免费视频亚洲| 免费成人小视频| 久久综合给合久久狠狠色|