绋嬪簭鍝$殑鑷垜淇锛氭韩鏁呰€岀煡鏂�

1.1寰濰ello World瑾捣

鐩殑锛氬緸鏈€鍩烘湰鐨勭法璀紝闈滄厠閺堟帴鍒版搷浣滅郴绲卞浣曡綁杓夌▼搴忥紝鍕曟厠閺堟帴鍙婇亱琛屽韩鍜屾婧栧韩鐨勫鐝撅紝鍜屼竴浜涙搷浣滅郴绲辩殑姗熷埗銆備簡瑙h▓绠楁涓婄▼搴忛亱琛岀殑涓€鍊嬪熀鏈剤绲°€�

1.2璁婁笉闆㈠叾瀹�

瑷堢畻姗熸渶闂滈嵉鐨勪笁鍊嬮儴鍒嗭細CPU,鍏у瓨,I/O鎺у埗鑺墖銆�

  • 鏃╂湡鐨勮▓绠楁锛氭矑鏈夊京闆滅殑鍦栧舰鍔熻兘锛孋PU鍜屽収瀛橀牷鐜囦竴妯o紝閮介€f帴鍦ㄥ悓涓€鍊嬬附绶氫笂銆�
  • CPU闋荤巼鎻愬崌锛氬収瀛樿窡涓嶄笂CPU锛岀敘鐢熶簡鍜屽収瀛橀牷鐜囦竴鑷寸殑绯荤当绺界窔锛孋PU浣跨敤鍊嶉牷鐨勬柟寮忓拰绺界窔閫氫俊銆�
  • 鍦栧舰鐣岄潰鐨勫嚭鐝撅細鍦栧舰鑺墖闇€瑕佸拰鍏у瓨鍜孋PU澶ч噺浜ゆ彌鏁告摎锛屾參閫熺殑I/O绺界窔鐒℃硶婊胯冻鍦栧舰瑷倷鐨勫法澶ч渶姹傘€傜偤浜嗛珮鏁堣檿鐞嗘暩鎿氾紝瑷▓浜嗕竴鍊嬮珮閫熺殑鍖楁⿱鑺墖銆傚悗渚嗘湁瑷▓铏曠悊浣庨€熻檿鐞嗚ō鍌欏崡姗嬭姱鐗囷紝纾佺洡锛孶SB锛岄嵉鐩ら兘鏄€f帴鍦ㄥ崡姗嬩笂銆傚湪鐢卞崡姗嬪皣瀹冨€戝尟绺藉埌鍖楁⿱涓娿€�
鍖楁⿱
  • 鍖楁⿱宸﹂倞CPU鍜宑ache锛欳PU璨犺铂鎵€鏈夋帶鍒跺拰閬嬬畻銆�
  • 鍖楁⿱涓嬮潰PCI绺界窔
  • 鍖楁⿱鍙抽倞memory
SMP鍜屽鏍�

鐝惧湪CPU宸茬稉閬斿埌鐗╃悊妤甸檺锛岃4GHz鎵€闄愬埗锛屼簬鏄紝闁嬪閫氶亷澧炲姞CPU鏁搁噺渚嗘彁楂樿▓绠楁閫熷害銆�
灏嶇ū澶氳檿鐞嗗櫒锛圫MP锛�锛氭渶甯歌鐨勪竴绋舰寮忋€傛瘡鍊婥PU鍦ㄧ郴绲变腑鎵€铏曠殑鍦颁綅鍜屾墍鐧兼彯鐨勫姛鑳芥槸涓€妯o紝鏄浉浜掑皪绋辩殑銆備絾鍦ㄨ檿鐞嗙▼搴忔檪锛屾垜鍊戝苟涓嶈兘鎶婁粬鍊戝垎鎴愯嫢骞插€嬩笉鐩稿共鐨勫瓙鍟忛锛屾墍浠ワ紝浣垮緱澶氳檿鐞嗗櫒閫熷害瀵﹂殯鎻愰珮寰楀苟娌掓湁鐞嗚珫涓婇偅涔堥珮銆傜暥灏嶄簬鐩镐簰鐛ㄧ珛鐨勫晱椤岋紝澶氳檿鐞嗗櫒灏辫兘鏈€澶ф晥鑳界殑鐧兼彯濞佸姏浜嗭紙姣斿锛氬ぇ鍨嬫暩鎿氬韩,缍茬怠鏈嶅嫏绛夛級銆�
灏嶈檿鐞嗗櫒鐢变簬閫犲児姣旇純楂樻槀锛屼富瑕佺敤鍦ㄥ晢鐢ㄩ浕鑵︿笂锛屽皪浜庡€嬩汉闆昏叇锛屼富瑕佹槸澶氭牳铏曠悊鍣�銆�
澶氭牳铏曠悊鍣細鍏跺闅涗笂鏄�(SMP)鐨勭啊鍖栫増锛屾€濇兂鏄皣澶氬€嬭檿鐞嗗櫒鍚堝苟鍦ㄤ竴璧锋墦鍖呭嚭鍞紝瀹冨€戜箣闁撳叡浜瘮杓冩槀璨寸殑绶╁瓨閮ㄤ欢锛屽彧淇濈暀浜嗗鍊嬫牳蹇冦€傚湪閭忚集涓婄湅锛屽畠鍊戝拰SMP瀹屽叏鐩稿悓銆�

1.3绔欏緱楂�,鐪嬪緱閬�

绯荤当杌熶欢锛氫竴鑸敤浜庣鐞嗚▓绠楁鏈湴鐨勮粺浠躲€�

涓昏鍒嗙偤鍏╁锛�

  • 骞宠嚭鎬х殑锛氭搷浣滅郴绲卞収鏍革紝椹呭嫊绋嬪簭锛岄亱琛屽韩銆�
  • 绋嬪簭闁嬬櫦锛氱法璀櫒锛屽尟绶ㄥ櫒锛岄張鎺ュ櫒銆�

瑷堢畻姗熺郴绲辫粺浠堕珨绯荤祼妲嬮噰鐢ㄤ竴绋�灞�鐨勭祼妲嬨€�
姣忓€嬪堡娆′箣闁撻兘闇€瑕佺浉浜掗€氫俊锛岄偅涔堝畠鍊戜箣闁撳氨鏈夐€氫俊鍗旇锛屾垜鍊戝皣瀹冪ū鐐烘帴鍙o紝鎺ュ彛涓嬪堡鏄彁渚涜€咃紝瀹氱京鎺ュ彛銆備笂灞ゆ槸浣跨敤鑰咃紝浣跨敤鎺ュ彛瀵︾従鎵€闇€鍔熻兘銆�
闄や簡纭欢鍜屾噳鐢ㄧ▼搴忥紝鍏朵粬鐨勯兘鏄腑闁撳堡锛屾瘡鍊嬩腑闁撳堡閮芥槸灏嶅畠涓嬮潰鐨勯偅灞ょ殑鍖呰鍜屾摯灞曘€傚畠鍊戜娇寰楁噳鐢ㄧ▼搴忓拰纭欢涔嬮枔淇濇寔鐩稿皪鐛ㄧ珛銆�
寰炴暣鍊嬪堡娆$祼妲嬩締鐪嬶紝闁嬬櫦宸ュ叿鑸囨噳鐢ㄧ▼搴忓爆浜庡悓涓€鍊嬪堡娆★紝鍥犵偤瀹冨€戦兘浣跨敤鍚屼竴鍊嬫帴鍙b€旀搷浣滅郴绲�鎳夌敤绋嬪簭绶ㄧ▼鎺ュ彛銆傛噳鐢ㄧ▼搴忔帴鍙f彁渚涜€呮槸閬嬭搴紝浠€涔堟ǎ鐨勯亱琛屽韩鎻愪緵浠€涔堟ǎ鐨勬帴鍙c€倃insows鐨勯亱琛屽韩鎻愪緵Windows API锛孡inux涓嬬殑Gliba搴彁渚汸OSIX鐨凙PI銆�
閬嬭搴娇鐢ㄦ搷浣滅郴绲辨彁渚涚殑绯荤当瑾跨敤鎺ュ彛銆�
绯荤当瑾跨敤鎺ュ彛鍦ㄥ鐝句腑寰€寰€浠�杌熶欢涓柗鐨勬柟寮忔彁渚涖€�
鎿嶄綔绯荤当鍏ф牳灞ゅ皪浜庣‖浠跺堡渚嗚鏄‖浠舵帴鍙g殑浣跨敤鑰咃紝鑰岀‖浠舵槸鎺ュ彛鐨勫畾缇╄€呫€傞€欑ó鎺ュ彛鍙仛纭欢瑕忔牸銆�

1.4鎿嶄綔绯荤当鍋氫簡浠€涔�

鎿嶄綔绯荤当鐨勪竴鍊嬪姛鑳芥槸鎻愪緵鎶借薄鐨勬帴鍙o紝鍙﹀涓€鍊嬩富瑕佸姛鑳芥槸绠$悊纭欢璩囨簮銆�
涓€鍊嬭▓绠楁涓殑璩囨簮涓昏鍒咰PU,瀛樺劜鍣紙鍖呮嫭鍏у瓨鍜岀鐩わ級鍜孖/O瑷倷銆備笅闈㈠緸閫�3鍊嬫柟闈締鐪嬪浣曟寲姗熷畠鍊戙€�

1.4.1涓嶈璁揅PU鎵撶浌

澶氶亾绋嬪簭锛氱法璀竴鍊嬬洠鎺х▼搴忥紝鐣剁▼搴忎笉闇€瑕佷娇鐢–PU鏅傦紝灏囧叾浠栧湪绛夊緟CPU鐨勭▼搴忓暉鍕曘€備絾瀹冪殑寮婄鏄笉鍒嗚紩閲嶇珐鎬ワ紝鏈夋檪鍊欎竴鍊嬩氦浜掓搷浣滃彲鑳借绛夊緟鏁稿崄鍒嗛悩銆�
鏀归€插悗
鍒嗘檪绯荤当锛氭瘡鍊婥PU閬嬭涓€娈垫檪闁撳悗锛屽氨涓诲嫊璁撳嚭绲﹀叾浠朇PU浣跨敤銆傚畬鏁寸殑鎿嶄綔绯荤当闆涘舰鍦ㄦ鏅傞枊濮嬪嚭鐝俱€備絾鐣朵竴鍊嬬▼搴忔姗熺殑鏅傚€欙紝鐒℃硶涓诲嫊璁撳嚭CPU锛岄偅涔堬紝鏁村€嬬郴绲遍兘鐒℃硶闊挎噳銆�
鐩墠鎿嶄綔绯荤当閲囩敤鐨勬柟寮�
澶氫换鍕欑郴绲�锛氭搷浣滅郴绲辨帴绠′簡鎵€鏈夌殑纭欢璩囨簮锛屽苟涓旀湰韬亱琛屽湪涓€鍊嬪彈纭欢淇濊鐨勭礆鍒ャ€傛墍鏈夌殑鎳夌敤閮戒互閫茬▼鐨勬柟寮忛亱琛屽湪姣旀搷浣滅郴绲辨洿浣庣殑绱氬垾锛屾瘡鍊嬮€茬▼閮芥湁鑷繁鐛ㄧ珛鐨勫湴鍧€绌洪枔锛屼娇寰楅€茬▼涔嬮枔鐨勫湴鍧€绌洪枔鐩镐簰闅旈洟銆侰PU鐢辨搷浣滅郴绲遍€茶鍚屼竴鍒嗛厤锛屾瘡鍊嬮€茬▼鏍规摎閫茬▼鍎厛绱氱殑楂樹綆閮芥湁姗熸渻鐛插緱CPU锛屼絾濡傛灉閬嬭瓒呴亷涓€瀹氱殑鏅傞枔锛孋PU鏈冨皣璩囨簮鍒嗛厤绲﹀叾浠栭€茬▼锛岄€欑óCPU鍒嗛厤鏂瑰紡鏄�鎼跺崰寮�銆傚鏋滄搷浣滅郴绲卞垎閰嶆瘡鍊嬮€茬▼鐨勬檪闁撳緢鐭紝灏辨渻閫犳垚寰堝閫茬▼閮藉湪鍚屾檪閬嬭鐨勫亣璞★紝鍗虫墍璎傜殑瀹忚骞惰锛屽井瑙€涓茶銆�

瑷倷椹呭嫊

鎿嶄綔绯荤当浣滅偤纭欢灞ょ殑涓婂堡锛屽畠鏄皪纭欢鐨勭鐞嗗拰鎶借薄銆�
灏嶄簬鎿嶄綔绯荤当涓婇潰鐨勯亱琛屽韩鍜屾噳鐢ㄧ▼搴忎締瑾紝瀹冨€戝彧甯屾湜鐪嬪埌涓€鍊嬬当涓€鐨勭‖浠惰í鍟忔ā寮忋€�
鐣舵垚鐔熺殑鎿嶄綔绯荤当鍑虹従鍚庯紝纭欢閫愭几鎴愪簡鎶借薄鐨勬蹇点€傚湪UNIX涓紝纭欢瑷倷鐨勮í鍟忓舰寮忓拰瑷晱鏅€氱殑鏂囦欢褰㈠紡涓€妯c€傚湪Windows绯荤当涓紝鍦栧舰纭欢琚娊璞℃垚GDI锛岃伈闊冲拰澶氬獟楂旇ō鍌欒鎶借薄鎴怐irectX灏嶈薄锛岀鐩よ鎶借薄鎴愭櫘閫氭枃浠剁郴绲便€�
閫欎簺绻佺懀鐨勭‖浠剁窗绡€鍏ㄩ兘浜ょ郸浜嗘搷浣滅郴绲变腑鐨勭‖浠堕﹨鍕曘€�
鏂囦欢绯荤当绠$悊閫欑鐩ょ殑瀛樺劜鏂瑰紡銆�
纾佺洡鐨勭祼妲�锛氫竴鍊嬬‖鐩ゅ線寰€鏈夊鍊嬬洡鐗囷紝姣忓€嬬洡鐗囧垎鍏╅潰锛屾瘡闈㈡寜鐓у悓蹇冨湏鍔冨垎鐐鸿嫢骞茬閬擄紝姣忓€嬬閬撳妰鍒嗙偤鑻ュ共鎵囧崁锛屾瘡鍊嬫墖鍗€涓€鑸�512瀛楃瘈銆�
LBA锛氭暣鍊嬬‖鐩や腑鎵€鏈夋墖鍗€寰�0闁嬪绶ㄨ櫉锛屼竴鐩村埌鏈€鍚庝竴鍊嬫墖鍗€锛岄€欏€嬫墖鍗€绶ㄨ櫉鍙仛閭忚集鎵囧崁铏�銆�
鏂囦欢绯荤当淇濆瓨浜嗛€欎簺鏂囦欢鐨勫瓨鍎茬祼妲嬶紝璨犺铂缍閫欎簺鏁告摎绲愭骞朵笖淇濊瓑纾佺洡涓殑鎵囧崁鑳芥湁鏁堢殑绲勭箶鍜屽埄鐢ㄣ€�

1.5鍏у瓨涓嶅鎬庝箞杈�

鍦ㄦ棭鏈熻▓绠楁涓紝绋嬪簭鏄洿鎺ラ亱琛屽湪鐗╃悊鍏у瓨涓婄殑锛岀▼搴忔墍瑷晱鐨勯兘鏄墿鐞嗗湴鍧€銆�
閭d箞濡備綍灏囪▓绠楁鏈夐檺鐨勫湴鍧€鍒嗛厤绲﹀鍊嬬▼搴忎娇鐢ㄣ€�
鐩存帴鎸夌墿鐞嗗収瀛樺垎閰嶅皣鐢㈢敓寰堝鍟忛锛�

  • 鍦板潃绌洪枔涓嶉殧闆�锛氭墍鏈夌殑绋嬪簭閮界洿鎺ヨí鍟忕墿鐞嗗湴鍧€锛屽皫鑷寸▼搴忎娇鐢ㄧ殑鐗╃悊鍦板潃涓嶆槸鐩镐簰闅旈洟鐨勶紝鎯℃剰鐨勭▼搴忓緢瀹规槗涓叉敼鍏朵粬绋嬪簭鐨勫収瀛樻暩鎿氥€�
  • 鍏у瓨浣跨敤鏁堢巼浣�锛氱敱浜庢矑鏈夋湁鏁堢殑鍏у瓨绠$悊姗熷埗锛岄€氬父涓€鍊嬬▼搴忓煼琛岀殑鏅傚€欙紝鐩f帶绋嬪簭瑕佸皣鏁村€嬬▼搴忚畝鍏ャ€傚収瀛樹笉澶犵殑鏅傚€欙紝闇€瑕佸厛灏囧収瀛樹腑鐨勭▼搴忚畝鍑猴紝淇濆瓨鍦ㄧ‖鐩や笂锛屾墠鑳藉皣闇€瑕侀亱琛岀殑绋嬪簭璁€鍏ャ€傞€欐ǎ鏈冧娇寰楁暣鍊嬮亷绋嬫湁澶ч噺鏁告摎鎻涘叆鎻涘嚭銆�
  • 绋嬪簭閬嬭鍦板潃涓嶇⒑瀹�锛氭瘡娆$▼搴忛亱琛岄兘闇€瑕佸収瀛樺垎閰嶄竴濉婅冻澶犲ぇ鐨勫収瀛樼┖闁擄紝浣垮緱閫欏€嬪湴鍧€鏄笉纰哄畾鐨勩€備絾鍦ㄧ▼搴忕法瀵殑鏅傚€欙紝浠栬í鍟忕殑鏁告摎鍜屾寚浠よ烦杞夌殑鐩鍦板潃閮芥槸鍥哄畾鐨勶紝閫欏氨娑夊強鍒颁簡绋嬪簭鐨�閲嶅畾鍚�鍟忛銆�

涓€绋В姹鸿睛娉曪細
涓枔灞�锛氫娇鐢ㄤ竴绋枔鎺ョ殑鍦板潃瑷晱鏂规硶锛屾垜鍊戞妸绋嬪簭绲﹀嚭鐨勫湴鍧€鐪嬩綔涓€绋�铏涙摤鍦板潃銆傝櫅鎿湴鍧€鏄墿鐞嗗湴鍧€鐨勬槧灏勶紝鍙铏曠悊濂介€欏€嬮亷绋嬶紝灏卞彲浠ヨ捣鍒伴殧闆㈢殑浣滅敤銆�

1.5.1闂滀簬闅旈洟

鏅€氱殑绋嬪簭瀹冨彧闇€瑕佷竴鍊嬬啊鍠殑鍩疯鐠板锛屼竴鍊嬪柈涓€鐨勫湴鍧€绌洪枔锛屾湁鑷繁鐨凜PU銆�
鍦板潃绌洪枔姣旇純鎶借薄锛屽鏋滄妸瀹冩兂璞℃垚涓€鍊嬫暩绲勶紝姣忎竴鍊嬫暩绲勬槸涓€瀛楃瘈锛屾暩绲勫ぇ灏忓氨鏄湴鍧€绌洪枔鐨勯暦搴︼紝閭d箞32浣嶇殑鍦板潃绌洪枔澶у皬灏辨槸2^32=4294967296瀛楃瘈锛屽嵆4G锛屽湴鍧€绌洪枔鏈夋晥浣嶆槸0x00000000~0xFFFFFFFF銆�
鍦板潃绌洪枔鍒嗙偤鍏╃ó锛�
鐗╃悊绌洪枔锛氬氨鏄墿鐞嗗収瀛樸€�32浣嶇殑姗熷櫒锛屽湴鍧€绶氬氨鏈�32姊濓紝鐗╃悊绌洪枔4G锛屼絾濡傛灉鍊艰鏈�512M鐨勫収瀛橈紝閭d箞瀵﹂殯鏈夋晥鐨勭┖闁撳湴鍧€灏辨槸0x00000000~0x1FFFFFFF锛屽叾浠栭儴鍒嗛兘鏄劇鏁堢殑銆�
铏涙摤绌洪枔锛氭瘡鍊嬮€茬▼閮芥湁鑷繁鐛ㄧ珛鐨勮櫅鎿┖闁擄紝鑰屼笖姣忓€嬮€茬▼鍙兘瑷晱鑷繁鐨勭┖闁撳湴鍧€锛岄€欐ǎ灏辨湁鏁堢殑鍋氬埌浜嗛€茬▼闅旈洟銆�

1.5.2鍒嗘

鍩烘湰鎬濊矾锛氭妸涓€娈佃垏绋嬪簭鎵€闇€瑕佺殑鍏у瓨绌洪枔澶у皬鐨勮櫅鎿┖闁撴槧灏勫埌鏌愬€嬪湴鍧€绌洪枔銆傝櫅鎿┖闁撶殑姣忓€嬪瓧绡€灏嶆噳鐗╃悊绌洪枔鐨勬瘡鍊嬪瓧绡€銆傞€欏€嬫槧灏勯亷绋嬬敱杌熶欢渚嗗畬鎴愩€�
鍒嗘鐨勬柟寮忓彲浠ヨВ姹轰箣鍓嶇殑绗竴鍊嬶紙鍦板潃绌洪枔涓嶉殧闆級鍜岀涓夊€嬪晱椤岋紙绋嬪簭閬嬭鍦板潃涓嶇⒑瀹氾級
绗簩鍟忛鍏у瓨浣跨敤鏁堢巼鍟忛渚濊垔娌掓湁瑙f焙銆�

1.5.3鍒嗛爜

鍩烘湰鏂规硶锛氭妸鍦板潃绌洪枔浜虹偤鐨勫垎鎴愬浐瀹氬ぇ灏忕殑闋侊紝姣忎竴闋佸ぇ灏忔湁纭欢姹哄畾鎴栫‖浠舵敮鎸佸绋ぇ灏忕殑闋侊紝鐢辨搷浣滅郴绲辨焙瀹氶爜鐨勫ぇ灏忋€�
鐩墠骞句箮鎵€鏈夌殑PC涓婄殑鎿嶄綔绯荤当閮芥槸4KB澶у皬鐨勯爜銆�
鎴戝€戞妸閫茬▼鐨勮櫅鎿湴鍧€绌洪枔鎸夐爜鍒嗗壊锛屾妸甯哥敤鐨勬暩鎿氬拰浠g⒓闋佽綁杓夊埌鍏у瓨涓紝鎶婁笉甯哥敤鐨勪唬纰煎拰鏁告摎淇濆瓨鍒扮鐩ら噷锛岀暥闇€瑕佺殑鏅傚€欏緸纾佺洡鍙栧嚭渚嗐€�
铏涙摤绌洪枔鐨勯爜鍙仛铏涙摤闋侊紙VP锛�,鐗╃悊鍏у瓨涓爜鍙仛鐗╃悊闋�锛屾妸纾佺洡涓殑闋佸彨鍋�纾佺洡闋�銆傝櫅鎿┖闁撶殑鏈夌殑闋佽鏄犲皠鍒板悓涓€鍊嬬墿鐞嗛爜锛岄€欐ǎ灏卞彲浠ュ鐝惧収瀛樺叡浜€�
鐣堕€茬▼闇€瑕佷竴鍊嬮爜鏅傦紝閫欏€嬮爜鏄鐩ら爜鏅傦紝纭欢鏈冩崟鐛插埌閫欏€嬫秷鎭紝灏辨槸鎵€璎傜殑闋侀尟瑾�锛岀劧鍚庢搷浣滅郴绲辨帴绠¢€茬▼锛岃矤璨緸纾佺洡涓畝鍙栧収瀹硅鍏ュ収瀛樹腑锛岀劧鍚庡啀灏囧収瀛樺拰閫欏€嬮爜寤虹珛鏄犲皠闂滅郴銆�
淇濊涔熸槸闋佹槧灏勭殑鐩殑涔嬩竴锛屾瘡鍊嬮爜閮藉彲浠ヨō缃瑠闄愬爆鎬э紝鍙湁鎿嶄綔绯荤当鍙互淇敼閫欎簺灞€э紝閫欐ǎ鎿嶄綔绯荤当灏卞彲浠ヤ繚璀疯嚜宸变繚璀烽€茬▼銆�
铏涙摤瀛樺劜鐨勫鐝鹃渶瑕佷緷闈犵‖浠舵敮鎸侊紝鎵€鏈夌‖浠堕兘閲囩敤涓€鍊嬪彨鍋歁MU鐨勯儴浠朵締閫茶闋佹槧灏勩€�
CPU鐧煎嚭铏涙摤鍦板潃缍撻亷MMU杞夋彌鎴愮墿鐞嗗湴鍧€锛孧MU涓€鑸兘闆嗘垚鍦–PU鍏ч儴銆�

1.6鐪句汉鎷炬煷鐏劙楂�

1.6.1绶氱▼鍩虹

澶氱窔绋嬬従鍦ㄤ綔鐐哄鐝捐粺浠跺苟鐧煎煼琛岀殑涓€鍊嬮噸瑕佹柟娉曪紝鍏锋湁瓒婁締瓒婇噸鐨勫湴浣嶃€�

浠€涔堟槸绶氱▼

绶氱▼鏈夋檪琚ū鐐鸿紩閲忕礆鐨勯€茬▼锛屾槸绋嬪簭鍩疯娴佺殑鏈€灏忓柈浣嶃€�

妲嬫垚锛�

  • 绶氱▼ID
  • 鐣跺墠鎸囦护鎸囬嚌
  • 瀵勫瓨鍣ㄩ泦鍚�
  • 鍫嗘'绌洪枔锛堜唬纰兼锛屾暩鎿氭锛屽爢锛�
  • 閫茬▼绱氱殑璩囨簮锛堟墦闁嬫枃浠跺拰淇¤櫉锛�

绶氱▼鑸囬€茬▼鐨勯棞绯伙細

澶氱窔绋嬪彲浠ヤ簰涓嶅共鎿剧殑骞剁櫦鍩疯锛屽苟鍏变韩閫茬▼鐨勫叏灞€璁婇噺鍜屽爢鐨勬暩鎿氥€�
浣跨敤澶氱窔绋嬬殑鍘熷洜鏈夊涓嬪咕榛烇細

  • 鏌愬€嬫搷浣滃彲鑳芥渻闄峰叆闀锋檪闁撶瓑寰咃紝绛夊緟鐨勭窔绋嬫渻閫插叆鐫$湢鐙€鎱嬶紝鐒℃硶绻肩簩鍩疯銆�
  • 鏌愬€嬫搷浣滄渻娑堣€楀ぇ閲忕殑鏅傞枔锛屽鏋滃彧鏈変竴鍊嬬窔绋嬶紝绋嬪簭鍜岀敤鎴朵箣闁撶殑浜や簰鏈冧腑鏂枫€�
  • 绋嬪簭閭忚集鏈韩灏辫姹傚苟鐧兼搷浣溿€�
  • 澶欳PU鎴栧鏍歌▓绠楁锛屾湰韬叿鍌欏悓鏅傚煼琛屽鍊嬬窔绋嬬殑鑳藉姏銆�
  • 鐩稿皪浜庡閫茬▼鎳夌敤锛屽绶氱▼鍦ㄦ暩鎿氬叡浜柟闈㈡晥鐜囪楂樺緢澶氥€�
绶氱▼鐨勮í鍟忔瑠闄�

绶氱▼鐨勮í鍟忛潪甯歌嚜鐢憋紝瀹冨彲浠ヨí鍟忛€茬▼鍏у瓨閲屾墍鏈夋暩鎿氾紝鍖呮嫭鍏朵粬绶氱▼鐨勫爢妫э紙濡傛灉鐭ラ亾鍦板潃鐨勮┍锛屾儏娉佸緢灏戣锛夈€�
绶氱▼鑷繁鐨勭鐢ㄥ瓨鍎茬┖闁擄細

  • 妫э紙骞剁櫦瀹屽叏鐒℃硶琚叾浠栫窔绋嬭í鍟忥級
  • 绶氱▼灞€閮ㄥ瓨鍎层€傛煇浜涙搷浣滅郴绲辩偤绶氱▼鎻愪緵绉佺敤绌洪枔锛屼絾瀹归噺鏈夐檺銆�
  • 瀵勫瓨鍣ㄣ€傚煼琛屾祦鐨勫熀鏈暩鎿氾紝鐐虹窔绋嬬鐢ㄣ€�
绶氱▼绉佺敤 绶氱▼闁撳叡浜紙閫茬▼鎵€鏈夛級
灞€閮ㄨ畩閲� 鍏ㄥ眬璁婇噺
鍑芥暩鍙冩暩 鍫嗕笂鏁告摎
TLS鏁告摎 鍑芥暩閲岀殑闈滄厠璁婇噺
绋嬪簭浠g⒓
鎵撻枊鐨勬枃浠讹紝A绶氱▼鎵撻枊鐨勬枃浠跺彲浠ョ敱B绶氱▼璁€鍙�
绶氱▼瑾垮害鑸囧劒鍏堢礆

涓嶈珫鍦ㄥ铏曠悊鍣ㄩ倓鏄柈铏曠悊鍣ㄤ笂锛岀窔绋嬮兘鏄€滃苟鐧尖€濈殑銆�
绶氱▼鏁搁噺灏忎簬铏曠悊鍣ㄦ暩閲忔檪锛屾槸鐪熸骞剁櫦鐨勩€�
鍠檿鐞嗗櫒涓嬶紝骞剁櫦鏄ā鎿殑锛屾搷浣滅郴绲辨渻璁撻€欎簺澶氱窔绋嬬▼搴忚吉娴佸煼琛岋紝姣忔閮藉彧鍩疯涓€灏忔鏅傞枔锛岄€欏氨绋辩偤绶氱▼瑾垮害銆�
绶氱▼瑾垮害涓紝绶氱▼鎿佹湁涓夌ó鐙€鎱嬶細

  • 閬嬭锛氱窔绋嬫鍦ㄥ煼琛�
  • 灏辩窉锛氱窔绋嬪彲浠ョ珛鍒婚亱琛岋紝浣咰PU琚崰鐢�
  • 绛夊緟锛氱窔绋嬫鍦ㄧ瓑寰呮煇涓€浜嬩欢鐧肩敓锛岀劇娉曠珛鍗冲煼琛屻€�

铏曚簬閬嬭涓殑绶氱▼鎿佹湁涓€娈靛彲浠ュ煼琛岀殑鏅傞枔锛岄€欑ū鐐�鏅傞枔鐗�锛岀暥鏅傞枔鐗囩敤鐩$殑鏅傚€欙紝閫茬▼閫插叆灏辩窉鐙€鎱嬶紝濡傛灉鍦ㄧ敤鐩′箣鍓嶉枊濮嬬瓑寰呮煇浜嬩欢锛岄偅涔堝畠灏遍€插叆绛夊緟鐙€鎱嬨€傛瘡鐣朵竴鍊嬬窔绋嬮洟闁嬮亱琛岀媭鎱嬬殑鏅傚€欙紝瑾垮害绯荤当灏辨渻閬告搰涓€鍊嬪叾浠栫殑灏辩窉绶氱▼绻肩簩鍩疯銆�

鐝惧湪鐨勪富娴佽搴︽柟娉曠洝绠¢兘涓嶄竴妯o紝浣嗗熀鏈兘甯舵湁鍎厛绱氳搴�鍜�杓綁娉�銆�
杓綁娉曪細鍚勫€嬬窔绋嬭吉娴佸煼琛屼竴娈垫檪闁撱€�
鍎厛绱氳搴︼細鎸夌窔绋嬬殑鍎厛绱氫締杓祦鍩疯锛屾瘡鍊嬬窔绋嬮兘鎿佹湁鍚勮嚜鐨勭窔绋嬪劒鍏堢礆銆�
鍦╳in鍜宭in閲岄潰锛岀窔绋嬪劒鍏堢礆涓嶅儏鍙互鐢辩敤鎴舵墜鍕曡ō缃紝绯荤当閭勬渻鏍规摎涓嶅悓绶氱▼琛ㄧ従鑷嫊瑾挎暣鍎厛绱氥€�
涓€鑸牷绻佺瓑寰呯殑绶氱▼绋变箣鐐�IO瀵嗛泦鍨嬬窔绋�锛岃€屾妸寰堝皯绛夊緟鐨勭窔绋嬬ū鐐�CPU瀵嗛泦鍨嬬窔绋�銆�
鍎厛绱氳搴︿笅锛屽瓨鍦ㄤ竴绋�椁撴鐝捐薄銆�
椁撴锛氱窔绋嬪劒鍏堢礆杓冧綆锛屽湪瀹冨煼琛屼箣鍓嶏紝绺芥槸鏈夎純楂樼礆鐨勭窔绋嬭鍩疯锛屾墍浠ワ紝浣庡劒鍏堢礆绶氱▼绺芥槸鐒℃硶鍩疯鐨勩€�
鐣朵竴鍊婥PU瀵嗛泦鍨嬬窔绋嬬嵅寰楄純楂樺劒鍏堢礆鏅傦紝瑷卞浣庡劒鍏堢礆绶氱▼灏卞彲鑳借椁撴銆�
鐐轰簡閬垮厤椁撴锛屾搷浣滅郴绲卞父甯告渻閫愭鎻愬崌閭d簺绛夊緟鏅傞枔閬庨暦鐨勭窔绋嬨€�
绶氱▼鍎厛绱氭敼璁婁竴鑸湁涓夌ó鏂瑰紡锛�

  • 鐢ㄦ埗鎸囧畾鍎厛绱�
  • 鏍规摎閫插叆绛夊緟鐙€鎱嬬殑闋荤箒绋嬪害鎻愬崌鎴栭檷浣庡劒鍏堢礆
  • 闀锋檪闁撳緱涓嶅埌鍩疯鑰岃鎻愬崌鍎厛绱�
鍙惗鍗犵窔绋嬪拰涓嶅彲鎼跺崰绶氱▼

鎼跺崰锛氬湪绶氱▼鐢ㄧ洝鏅傞枔鐗囦箣鍚庤寮峰埗鍓濆オ绻肩簩鍩疯鐨勬瑠鍒╋紝鑰岄€插叆灏辩窉鐙€鎱嬨€�
鍦ㄦ棭鏈熺殑绯荤当涓紝绶氱▼鏄�涓嶅彲鎼跺崰鐨勶紝绶氱▼蹇呴爤涓诲嫊閫插叆灏辩窉鐙€鎱嬨€�
鍦ㄤ笉鍙惗鍗犵窔绋嬩腑锛岀窔绋嬩富鍕曟斁妫勪富瑕佹槸2绋細

  • 鐣剁窔绋嬭│鍦栫瓑寰呮煇鍊嬩簨浠讹紙I/O锛夋檪
  • 绶氱▼涓诲嫊鏀炬鏅傞枔鐗�

涓嶅彲鎼跺崰绶氱▼鏈変竴鍊嬪ソ铏曪紝灏辨槸绶氱▼瑾垮害鍙渻鐧肩敓鍦ㄧ窔绋嬩富鍕曟斁妫勫煼琛屾垨绶氱▼绛夊緟鏌愬€嬩簨浠剁殑鏅傚€欙紝閫欐ǎ灏卞彲浠ラ伩鍏嶄竴浜涙惗鍗犲紡绶氱▼鏅傞枔涓嶇⒑瀹氳€岀敘鐢熺殑鍟忛銆�

Linux鐨勫绶氱▼

Linux鍏ф牳涓苟涓嶅瓨鍦ㄧ湡姝f剰缇╀笂鐨勭窔绋嬫蹇点€侺inux鎵€鏈夊煼琛屽楂旓紙绶氱▼鍜岄€茬▼锛夐兘绋辩偤浠诲嫏锛屾瘡涓€鍊嬩换鍕欐蹇典笂閮介浼间竴鍊嬪柈绶氱▼鐨勯€茬▼锛屽叿鏈夊収瀛樼┖闁擄紝鍩疯瀵﹂珨锛屾枃浠惰硣婧愮瓑銆侺inux涓嶅悓浠诲嫏涔嬮枔鍙互閬告搰鍏变韩鍏у瓨绌洪枔锛岀浉鐣朵簬鍚屼竴鍊嬪収瀛樼┖闁撶殑澶氬€嬩换鍕欐鎴愪竴鍊嬮€茬▼锛岄€欎簺浠诲嫏灏辨槸閫茬▼涓殑绶氱▼銆�

绯荤当瑾跨敤 浣滅敤
fork 寰╁埗鐣跺墠绶氱▼
exec 浣跨敤鏂扮殑鍙煼琛屾槧鍍忚钃嬬暥鍓嶅彲鍩疯鏄犲儚
clone 鍓靛缓瀛愰€茬▼骞跺緸鎸囧畾浣嶇疆闁嬪鍩疯

fork鐢㈢敓鏂颁换鍕欓€熷害闈炲父蹇紝鍥犵偤fork涓嶅京鍒跺師浠诲嫏鐨勫収瀛樼┖闁擄紝鑰屾槸鍜屽師浠诲嫏涓€璧峰叡浜竴鍊�瀵檪寰╁埗鐨勫収瀛樼┖闁撱€�

瀵檪寰╁埗锛氬叐鍊嬩换鍕欏彲浠ュ悓鏅傝嚜鐢辫畝鍙栧収瀛橈紝鐣朵换鎰忎竴鍊嬩换鍕欒│鍦栧皪鍏у瓨閫茶淇敼鏅傦紝鍏у瓨灏辨渻寰╁埗涓€浠藉柈鐛ㄦ彁渚涚郸淇敼鏂逛娇鐢ㄣ€�
fork鍙兘澶犵敘鐢熸湰浠诲嫏鐨勯彙鍍忥紝鍥犳闇€瑕佸拰exec閰嶅悎鎵嶈兘鍟熷嫊鍒ョ殑鏂颁换鍕欍€�
鑰屽鏋滆鐢㈢敓鏂扮窔绋嬶紝鍓囦娇鐢╟lone銆�
clone鍙互鐢㈢敓涓€鍊嬫柊鐨勪换鍕欙紝寰炴寚瀹氫綅缃枊濮嬪煼琛岋紝骞朵笖鍏变韩鐣跺墠閫茬▼鐨勫収瀛樼┖闁撳拰鏂囦欢绛夛紝瀵﹂殯鏁堟灉灏辨槸鐢㈢敓涓€鍊嬬窔绋嬨€�

1.6.2绶氱▼瀹夊叏

澶氱窔绋嬬▼搴忚檿浜庝竴鍊嬪璁婄殑鐠板涓紝鍙í鍟忕殑鍏ㄥ眬璁婇噺鍜屽爢鏁告摎闅ㄦ檪閮藉彲鑳借鍏朵粬鐨勭窔绋嬫敼璁娿€傚洜姝ゅ绶氱▼绋嬪簭鍦ㄥ苟鐧兼檪鏁告摎鐨勪竴鑷存€ц畩寰楅潪甯搁噸瑕併€�

绔剁埈鑸囧師瀛愭搷浣�

++i鐨勫鐝炬柟娉曪細

  • 璁€鍙杋鍒版煇鍊嬪瘎瀛樺櫒X
  • X++
  • 灏嘪鐨勫収瀹瑰瓨鍎插洖i
    鍠鎸囦护鐨勬搷浣滅ū鐐�鍘熷瓙鐨�锛屽柈鎸戞寚浠ょ殑鍩疯涓嶆渻琚墦鏂枫€傚湪windows閲岋紝鏈変竴濂桝PI灏堥杸閫茶涓€浜涘師瀛愭搷浣滐紝閫欎簺API绋辩偤Interlocked API銆�
鍚屾鑸囬帠

鐐轰簡闃叉澶氬€嬬窔绋嬭畝鍙栧悓涓€鍊嬫暩鎿氱敘鐢熶笉鍙爯鏂欑祼鏋滐紝鎴戝€戝皣鍚勫€嬬窔绋嬪皪涓€鍊嬫暩鎿氱殑瑷晱鍚屾銆�
鍚屾锛氬湪涓€鍊嬬窔绋嬪皪涓€鍊嬫暩鎿氳í鍟忕祼鏉熺殑鏅傚€欙紝鍏朵粬绶氱▼涓嶈兘灏嶅悓涓€鍊嬫暩鎿氶€茶瑷晱銆傚皪鏁告摎鐨勮í鍟忚鍘熷瓙鍖栥€�
閹�锛氶帠鏄竴绋潪寮峰埗姗熷埗锛屾瘡涓€鍊嬬窔绋嬪湪瑷晱鏁告摎鎴栬€呰硣婧愪箣鍓嶆渻鍏堢嵅鍙栭帠锛屽湪瑷晱绲愭潫鍚庢渻閲嬫斁閹栥€傚湪閹栬鍗犵敤鏅傚€欒│鍦栫嵅鍙栭帠鏅傦紝绶氱▼鏈冪瓑寰咃紝鐭ラ亾閹栧彲浠ラ噸鏂颁娇鐢ㄣ€�
浜屽厓淇¤櫉閲�锛氭渶绨″柈鐨勯帠锛屽畠閬╁悎鍙兘琚敮涓€涓€鍊嬬窔绋嬬崹鍗犺í鍟忕殑璩囨簮锛屽畠鐨勫叐绋媭鎱嬶細

  • 闈炲崰鐢ㄧ媭鎱嬶細绗竴鍊嬬嵅鍙栬┎浜屽厓淇¤櫉閲忕殑绶氱▼鏈冪嵅寰楄┎閹栵紝骞跺皣浜屽厓淇¤櫉閲忕疆鐐哄崰鐢ㄧ媭鎱嬶紝鍏朵粬鎵€鏈夎í鍟忚┎浜屽厓淇¤櫉閲忕窔绋嬪皣鏈冪瓑寰呫€�
  • 鍗犵敤鐙€鎱�

淇¤櫉閲�锛氬厑瑷卞鍊嬬窔绋嬪苟鐧艰í鍟忕殑璩囨簮銆備竴鍊嬪垵濮嬪€肩偤N鐨勪俊铏熼噺鍏佽ūN鍊嬬窔绋嬪苟鐧艰í鍟忋€�
鎿嶄綔濡備笅锛�

  • 灏囦俊铏熼噺鍊奸嵉1
  • 濡傛灉淇¤櫉閲忓€煎皬浜�0锛屽氨閫插叆绛夊緟鐙€鎱嬨€�

瑷晱瀹岃硣婧愬悗锛岀窔绋嬮噵鏀句俊铏熼噺锛�

  • 灏囦俊铏熼噺鍔�1
  • 濡傛灉淇¤櫉閲忕殑鍊煎皬浜�1锛屽枤閱掍竴鍊嬬瓑寰呬腑鐨勭窔绋嬨€�

浜掓枼閲�锛氬拰浜屽厓淇¤櫉閲忓緢椤炰技锛屼絾鍜屼俊铏熼噺涓嶅悓鐨勬槸锛氫俊铏熼噺鍦ㄤ竴鍊嬬郴绲变腑锛屽彲浠ヨ浠绘剰绶氱▼鐛插彇鎴栭噵鏀俱€備簰鏂ラ噺瑕佹眰閭e€嬬窔绋嬬嵅鍙栦簰鏂ラ噺锛岄偅涔堝摢鍊嬬窔绋嬪氨閲嬫斁浜掓枼閲忥紝鍏朵粬绶氱▼閲嬫斁鐒℃晥銆�
鑷ㄧ晫鍗€锛氭瘮浜掓枼閲忔洿鍔犲毚鏍肩殑鎵嬫銆傛妸鑷ㄧ晫鍗€鐨勯帠鐛插彇绋辩偤閫插叆鑷ㄧ晫鍗€锛岃€屾妸閹栫殑閲嬫斁绋辩偤闆㈤枊鑷ㄧ晫鍗€銆傝嚚鐣屽崁鍜屼簰鏂ラ噺锛屼俊铏熼噺鍗€鍒ュ湪鑸囦簰鏂ラ噺锛屼俊铏熼噺鍦ㄧ郴绲变腑浠绘剰閫茬▼閮芥槸鍙鐨勩€傝嚚鐣屽崁鐨勪綔鐢ㄨ寖鍦嶅儏闄愪簬鏈窔绋嬶紝鍏朵粬绶氱▼鐒℃硶鐛插彇銆傚叾浠栨€ц唱鑸囦簰鏂ラ噺鐩稿悓銆�
璁€瀵帠锛氳嚧鍔涗簬涓€绋洿鍔犵壒瀹氱殑鍫村悎鐨勫悓姝ャ€傚鏋滀娇鐢ㄤ箣鍓嶄娇鐢ㄧ殑淇¤櫉閲忋€佷簰鏂ラ噺鎴栬嚚鐣屽崁涓殑浠讳綍涓€绋€茶鍚屾锛屽皪浜庤畝鍙栭牷绻侊紝鑰屽儏鍍呮槸鍋剁埦瀵叆鐨勬儏娉佹渻椤緱闈炲父浣庢晥銆傝畝瀵帠鍙互閬垮厤閫欏€嬪晱椤屻€傚皪浜庡悓涓€鍊嬮帠锛岃畝瀵帠鏈夊叐绋嵅鍙栨柟寮忥細

  • 鍏变韩鐨�
  • 鐛ㄥ崰鐨�

璁€瀵帠鐨勭附绲�

璁€瀵帠鐙€鎱� 浠ュ叡浜柟寮忕嵅鍙� 浠ョ崹鍗犳柟寮忕嵅鍙�
鑷敱 鎴愬姛 鎴愬姛
鍏变韩 鎴愬姛 绛夊緟
鐛ㄥ崰 绛夊緟 绛夊緟

姊濅欢璁婇噺锛氫綔鐐哄悓姝ョ殑鎵嬫锛屼綔鐢ㄩ浼间簬涓€鍊嬫煹娆勩€傚皪浜庢浠惰畩閲忥紝绶氱▼鏈夊叐鍊嬫搷浣滐細

  • 绶氱▼鍙互绛夊緟姊濅欢璁婇噺锛屼竴鍊嬫浠惰畩閲忓彲浠ヨ澶氬€嬬窔绋嬬瓑寰�
  • 绶氱▼鍙互鍠氶啋姊濅欢璁婇噺锛屾鏅傛煇鍊嬫垨鎵€鏈夌瓑寰呮姊濅欢璁婇噺鐨勭窔绋嬮兘鏈冭鍠氶啋骞剁辜绾屾敮鎸�

浣跨敤姊濅欢璁婇噺鍙互璁撹ū澶氱窔绋嬩竴璧风瓑寰呮煇鍊嬩簨浠剁殑鐧肩敓锛岀暥浜嬩欢鐧肩敓鏅傦紝鎵€鏈夌窔绋嬪彲浠ヤ竴璧锋仮寰╁煼琛屻€�

鍙噸鍏ヨ垏绶氱▼瀹夊叏

涓€鍊嬪嚱鏁歌閲嶅叆锛岃〃绀洪€欏€嬪嚱鏁告矑鏈夊煼琛屽畬鎴愶紝鐢变簬澶栭儴鍥犵礌鎴栧収閮ㄨ鐢紝鍙堜竴娆¢€插叆瑭插嚱鏁稿煼琛屻€�
涓€鍊嬪嚱鏁歌琚噸鍏ワ紝鍙湁鍏╃ó鎯呮硜锛�

  • 澶氬€嬬窔绋嬪悓鏅傚煼琛岄€欏€嬪嚱鏁�
  • 鍑芥暩鑷韩锛堝彲鑳界稉閬庡灞よ鐢ㄤ箣鍚庯級瑾跨敤鑷韩

涓€鍊嬪嚱鏁歌绋辩偤鍙噸鍏ワ紝琛ㄧず閲嶅叆涔嬪悗涓嶆渻鐢㈢敓浠讳綍涓嶈壇褰遍熆

鍙噸鍏ュ嚱鏁革細

1
2
3
4
int sqr(int x)
{
    return x * x;
}

涓€鍊嬪嚱鏁歌鎴愮偤鍙噸鍏ワ紝蹇呴爤鍏锋湁濡備笅鐗归粸锛�

  • 涓嶄娇鐢ㄤ换浣曪紙灞€閮級闈滄厠鎴栧叏灞€鐨勯潪const璁婇噺
  • 涓嶈繑鍥炰换浣曪紙灞€閮級闈滄厠鎴栧叏閮ㄧ殑闈瀋onst璁婇噺鐨勬寚閲�
  • 鍍呬緷璩磋鐢ㄦ柟鎻愪緵鐨勫弮鏁�
  • 涓嶄緷璩翠换浣曞柈鍊嬭硣婧愮殑閹�
  • 涓嶈鐢ㄤ换浣曚笉鍙噸鍏ョ殑鍑芥暩

鍙噸鍏ユ槸骞剁櫦瀹夊叏鐨勫挤鍔涗繚闅滐紝涓€鍊嬪彲閲嶅叆鐨勫嚱鏁稿彲浠ュ湪澶氱▼搴忕挵澧冧笅鏂瑰悜浣跨敤

閬庡害鍎寲

鏈夋檪鍊欏悎鐞嗙殑鍚堢悊鐨勪娇鐢ㄤ簡閹栦篃涓嶄竴瀹氳兘淇濊瓑绶氱▼鐨勫畨鍏ㄣ€�

1
2
3
4
5
6
7
8
9
10
//Thread1
x=0;
lock();
x++;
unlock();
//Thread2
x=0;
lock();
x++;
unlock();

涓婇潰X鐨勫€兼噳瑭茬偤2锛屼絾濡傛灉绶ㄨ鍣ㄧ偤浜嗘彁楂榅鐨勮í鍟忛€熷害锛屾妸X鏀惧埌浜嗘煇鍊嬪瘎瀛樺櫒閲岄潰锛屼笉鍚岀窔绋嬬殑瀵勫瓨鍣ㄦ槸鍚勮嚜鐛ㄧ珛鐨勶紝鍥犳锛屽鏋淭hread1鍏堢嵅寰楅帠锛屽墖绋嬪簭鐨勫煼琛屽彲鑳芥渻鍛堢従濡備笅锛�
[Thread1]璁€鍙杧鐨勫€煎埌鏌愬€嬪瘎瀛樺櫒R [1] (R[1]=0);
[Thread1]R[1]++(鐢变簬涔嬪悗鍙兘瑕佽í鍟忓埌x,鎵€浠hread1鏆檪涓嶅皣R[1]瀵洖x);
[Thread2]璁€鍙杧鐨勫€煎埌鏌愬€嬪瘎瀛樺櫒R[2] (R[2]=0);
[Thread2]R[2]++(R[2]=1);
[Thread2]灏嘡[2]瀵洖鑷硏(x=1);
[Thread1] (寰堜箙浠ュ悗)灏嘡[1]瀵洖鑷硏(x=1);
濡傛灉閫欐ǎ锛屽嵆浣垮姞閹栦篃涓嶈兘淇濊瓑绶氱▼瀹夊叏

1
2
3
4
5
6
7
x=y=0;
//Thread1
x=1;
r1=y;
//Thread2
y=1;
r2=x;

涓婇潰浠g⒓鏈夊彲鑳界櫦鐢焤1=r2=0鐨勬儏娉併€�
CPU鍕曟厠瑾垮害锛氬湪鍩疯绋嬪簭鐨勬檪鍊欙紝鐐轰簡鎻愰珮鏁堢巼鏈夊彲鑳戒氦鎻涙寚浠ょ殑闋嗗簭銆�
绶ㄨ鍣ㄥ湪閫茶鍎寲鐨勬檪鍊欙紝涔熷彲鑳界偤浜嗘晥鐜囦氦鎻涘叐鍊嬫涓嶇浉骞茬殑鐩搁劙鎸囦护鐨勫煼琛岄爢搴忋€�
涓婇潰浠g⒓鍩疯闋嗗簭鍙兘鏄€欐ǎ锛�

1
2
3
4
5
6
7
x=y=0;
[Thread1]
r1=y;
x=1;
[Thread2]
y=1;
r2=x;

浣跨敤volatile闂滈嵉瀛楀彲浠ラ樆姝㈤亷搴﹀劒鍖栵紝colatile鍙互鍋氬叐浠朵簨鎯咃細

  • 闃绘绶ㄨ鍣ㄧ偤浜嗘彁楂橀€熷害灏囦竴鍊嬭畩閲忕珐瀛樺埌瀵勫瓨鍣ㄥ収鑰屼笉瀵洖
  • 闃绘绶ㄨ鍣ㄨ鏁存搷浣渧olatile璁婇噺鐨勬寚浠ら爢搴�

浣唙olatile鐒℃硶闃绘CPU鍕曟厠瑾垮害鎻涘簭
C++涓紝鍠緥妯″紡銆�

C++
1
2
3
4
5
6
7
8
9
10
11
12
volatile T * pInst = 0;
T * GetInstance()
{
    if (pInst == NULL)
    {
        LOCK();
        if (pInst == NULL)
            pInst = new T;
        unlock();
    }
    return pInst;
}

CPU鐨勪簜搴忓煼琛屽彲鑳芥渻灏嶄笂闈唬纰肩収鎴愬奖闊�
C++閲岀殑new鍖呭惈鍏╁€嬫椹燂細

  • 鍒嗛厤鍏у瓨
  • 瑾跨敤妲嬮€犲嚱鏁�

鎵€浠Inst=new T鍖呭惈涓夊€嬫椹燂細

  • 鍒嗛厤鍏у瓨
  • 鍦ㄥ収瀛樼殑浣嶇疆涓婅鐢ㄦ閫犲嚱鏁�
  • 灏囧収瀛樼殑鍦板潃璩﹀€肩郸pInst

閫欎笁姝ヤ腑2鍜�3鐨勬椹熷彲浠ラ鍊掞紝鍙兘鍑虹従閫欑ó鎯呮硜锛歱Inst涓殑鍊间笉鏄疦ULL锛屼絾灏嶈薄閭勬槸娌掓湁妲嬮€犲畬鎴愩€�
瑕侀樆姝PU鎻涘簭锛屽彲浠ヨ鐢ㄤ竴姊濇寚浠わ紝閫欐鎸囦护甯稿父琚ū鐐篵arrier锛氬畠鏈冮樆姝PU灏囪┎鎸囦护涔嬪墠鐨勬寚浠や氦鎻涘埌barrier涔嬪悗銆�
瑷卞楂旂郴鐨凜PU閮芥彁渚涗簡barrier鎸囦护锛屼笉閬庯紝瀹冨€戠殑鍚嶇ū鍚勪笉鐩稿悓銆備緥濡侾OWERPC鎻愪緵鐨勬寚浠ゅ氨鍙仛lwsync銆傛墍浠ユ垜鍊戝彲浠ラ€欐ǎ淇濊瓑绶氱▼瀹夊叏锛�

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define barrier() __asm__ volatile("lwsync")
volatile T * pInst = 0;
T * GetInstance()
{
    if (pInst == NULL)
    {
        LOCK();
        if (pInst == NULL)
        {
            T * temp = new T;
            barrier();
            pInst = temp;
        }
        unlock();
    }
    return pInst;
}

1.6.3澶氱窔绋嬬殑鍏ч儴鎯呮硜

绶氱▼鐨勫苟鐧煎煼琛屾槸鐢卞铏曠悊鍣ㄦ垨鎿嶄綔绯荤当瑾垮害渚嗗鐝剧殑銆倃indows鍜宭inux閮藉湪鍏ф牳涓彁渚涚窔绋嬫敮鎸侊紝鏈夊铏曠悊鍣ㄦ垨瑾垮害渚嗗鐝惧苟鐧笺€傜敤鎴跺闅涗娇鐢ㄧ窔绋嬪苟涓嶆槸鍏ф牳绶氱▼锛岃€屾槸瀛樺湪浜庣敤鎴舵厠鐨勭敤鎴剁窔绋嬨€傜敤鎴剁窔绋嬪苟涓嶄竴瀹氬湪鎿嶄綔绯荤当鍏ф牳閲屽皪鎳夊悓绛夋暩閲忕殑鍏ф牳绶氱▼銆傚皪鐢ㄦ埗渚嗚锛屽鏋滄湁涓夊€嬬窔绋嬪悓鏅傚煼琛岋紝鍙兘鍦ㄥ収鏍镐腑鍙湁涓€鍊嬬窔绋嬨€�

涓€灏嶄竴妯″瀷

灏嶄簬鐩存帴鏀寔绶氱▼鐨勭郴绲憋紝涓€灏嶄竴妯″瀷濮嬬祩鏄渶鐐虹啊鍠殑妯″瀷銆備竴鍊嬬敤鎴朵娇鐢ㄧ殑绶氱▼灏卞敮涓€灏嶆噳涓€鍊嬪収鏍镐娇鐢ㄧ殑绶氱▼锛屼絾杩斿洖渚嗭紝涓€鍊嬪収鏍搁噷闈㈢殑绶氱▼鍦ㄧ敤鎴舵厠涓嶄竴瀹氭湁灏嶆噳鐨勭窔绋嬪瓨鍦ㄣ€�

灏嶄簬涓€灏嶄竴妯″瀷锛岀窔绋嬩箣闁撶殑骞剁櫦鏄湡姝g殑骞剁櫦锛屼竴鍊嬬窔绋嬪洜鐐烘煇鍊嬪師鍥犻樆濉烇紝骞朵笉鏈冨奖闊垮埌鍏朵粬绶氱▼銆備竴灏嶄竴妯″瀷涔熷彲浠ヨ畵澶氱窔绋嬬▼搴忓湪澶氳檿鐞嗗櫒鐨勭郴绲变笂鏈夋洿濂界殑琛ㄧ従銆�
涓€鑸洿鎺ヤ娇鐢ˋPI鎴栬€呯郴绲辫鐢ㄥ壍寤虹殑绶氱▼鍧囩偤涓€灏嶄竴绶氱▼銆�
涓€灏嶄竴绶氱▼鐨勫叐鍊嬬己榛烇細

  • 鐢变簬瑷卞鎿嶄綔绯荤当闄愬埗浜嗗収鏍哥窔绋嬫暩閲忥紝鍥犳涓€灏嶄竴绶氱▼鏈冭畵鐢ㄦ埗鐨勭窔绋嬫暩閲忓彈鍒伴檺鍒躲€�
  • 瑷卞鎿嶄綔绯荤当鍏ф牳绶氱▼瑾垮害鏄紝涓婁笅鏂囧垏鎻涚殑闁嬮姺杓冨ぇ锛屽皫鑷寸敤鎴剁窔绋嬬殑鍩疯鏁堢巼涓嬮檷銆�
澶氬皪涓€妯″瀷

澶氬皪涓€妯″瀷灏囧鍊嬬敤鎴剁窔绋嬫槧灏勫埌涓€鍊嬪収鏍哥窔绋嬩笂锛岀窔绋嬩箣闁撶殑鍒囨彌鐢辩敤鎴舵厠鐨勪唬纰间締閫茶锛岀浉灏嶄簬涓€灏嶄竴妯″瀷锛屽灏嶄竴妯″瀷鐨勭窔绋嬪垏鎻涜蹇€熻ū澶氥€�

澶氬皪涓€妯″瀷鐨勫晱椤屽氨鏄鏋滀竴鍊嬬敤鎴剁窔绋嬮樆濉炰簡锛岄偅涔堟墍鏈夌殑绶氱▼閮藉皣鐒℃硶鍩疯銆傚湪澶氳檿鐞嗙郴绲变笂锛岃檿鐞嗗櫒鐨勫澶氬皪澶氬皪涓€妯″瀷鐨勭窔绋嬫€ц兘涓嶆渻鏈夋槑椤公鍔┿€傚灏嶄竴妯″瀷寰楀埌鐨勫ソ铏曟槸楂樻晥鐨勪笂涓嬫枃鍒囨彌鍜屽咕涔庣劇闄愬埗鐨勭窔绋嬫暩閲忋€�

澶氬皪澶氭ā鍨�

澶氬皪澶氭ā鍨嬬祼鍚堜簡澶氬皪涓€鍜屼竴灏嶄竴鐨勭壒榛烇紝灏囧鍊嬬敤鎴剁窔绋嬫槧灏勫埌灏戞暩浣嗕笉姝竴鍊嬪収鏍哥窔绋嬩笂銆�

涓€鍊嬬敤鎴剁窔绋嬮樆濉炲苟涓嶆渻浣垮緱鎵€鏈夌殑鐢ㄦ埗绶氱▼闃诲銆傚苟涓斿皪鐢ㄦ埗绶氱▼鏁搁噺涔熸矑鏈変粈涔堥檺鍒讹紝鍦ㄥ铏曠悊鍣ㄧ郴绲变笂锛屽灏嶅妯″瀷鐨勭窔绋嬩篃鑳藉緱鍒颁竴瀹氱殑鎬ц兘鎻愬崌锛屼笉閬庢彁鍗囩殑骞呭害娌掓湁涓€灏嶄竴妯″瀷楂樸€�

the end
代码语言

瑭曡珫锛�0锛�