Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÈçºÎ±àдḬ̈߳²È«µÄ´úÂ룿
 
 
  2443  次浏览      27
 2021-1-27 
 
±à¼­ÍƼö:
±¾ÎÄÖ÷ÒªÁ˽âÒ»ÏÂʲôÊÇḬ̈߳²È«£¬ÔõÑù²ÅÄÜ×öµ½Ḭ̈߳²È«¡£
±¾ÎÄÀ´×ÔÓÚÂëÅ©µÄ»ÄµºÇóÉú£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

´Ó¸ùÔ´ÉÏ˼¿¼

¹ØÓÚÕâ¸öÎÊÌ⣬±¾ÖÊÉÏÊÇÓÐÒ»¸ö´ÊÓïÄãûÓÐ͸³¹Àí½â£¬Õâ¸ö´Ê¾ÍÊÇËùνµÄḬ̈߳²È«£¬thread safe¡£

Èç¹ûÄã²»ÄÜÀí½âḬ̈߳²È«£¬ÄÇô¸øÄãÔÙ¶àµÄ·½°¸Ò²ÊÇÎÞÓÃÎäÖ®µØ¡£

½ÓÏÂÀ´ÎÒÃÇÁ˽âÒ»ÏÂʲôÊÇḬ̈߳²È«£¬ÔõÑù²ÅÄÜ×öµ½Ḭ̈߳²È«¡£

ÕâЩÎÊÌâ½â´ðºó£¬¶àÏß³ÌÕâÍ·´ó¹ÖÊÞ×ÔÈ»¾Í»á±ä³ÉÎÂ˳µÄСèßä¡£

¿ÉÉÏͼ¹ØÐ¡Ã¨ß䯍Ê£¡

¹ØÄãʲôƨÊÂ

Éú»îÖÐÎÒÃÇ¿ÚÍ·ÉϾ­³£ËµµÄÒ»¾ä»°¾ÍÊÇ¡°¹ØÄãÆ¨Ê¡±£¬´ó¼ÒÏëÒ»Ï룬ΪʲôÎÒÃÇµÄÆ¨Ê²»¹Ø±ðÈË£¿

Ô­ÒòºÜ¼òµ¥£¬ÕâÊÇÎÒµÄ˽ʰ¡£¡ÎÒµÄÒ·þ¡¢ÎҵĵçÄÔ£¬ÎÒµÄÊÖ»ú¡¢Îҵijµ×Ó¡¢ÎҵıðÊûÒÔ¼°Ë½ÈËÓ¾³Ø(¿ÉÒÔûÓУ¬µ«²»·Á°­ÏëÏó)£¬ÎÒÏëÔõô´¦Àí¾ÍÔõô´¦Àí£¬·Á°­²»µ½±ðÈË£¬Ö»ÊôÓÚÎÒÒ»¸öÈ˵Ķ«Î÷ÒÔ¼°ÊÂÇ鵱Ȼ²»¹Ø±ðÈË£¬¼´Ê¹ÊÇÆ¨ÊÂÒ²²»¹Ø±ðÈË¡£

ÎÒÃÇÔÚ×Ô¼º¼ÒÀïÏë³Ôʲô³Ôʲô£¬ÏëÈ¥²ÞËù¾ÍÈ¥²ÞËù£¡ÒòΪÕâЩ¶¼ÊÇÎÒ˽Óеģ¬Ö»ÓÐÎÒ×Ô¼ºÊ¹Óá£

ÄÇôʲôʱºò»áºÍÆäËüÈËÓн»¼¯ÄØ£¿

´ð°¸¾ÍÊǹ«¹²³¡Ëù¡£

ÔÚ¹«¹²³¡ËùÏÂÄã²»ÄÜÏñÔÚ×Ô¼º¼ÒÀïÒ»ÑùÏëÈ¥ÄľÍÈ¥ÄÄ£¬ÏëʲôʱºòÈ¥²ÞËù¾ÍÈ¥²ÞËù£¬ÎªÊ²Ã´ÄØ£¿Ô­ÒòºÜ¼òµ¥£¬ÒòΪ¹«¹²³¡ËùÏµķ¹¹Ý¡¢ÎÀÉú¼ä²»ÊÇÄã¼ÒµÄ£¬ÕâÊǹ«¹²×ÊÔ´£¬´ó¼Ò¶¼¿ÉÒÔʹÓõĹ«¹²×ÊÔ´¡£

Èç¹ûÄãÏëÈ¥·¹¹Ý¡¢È¥¹«¹²ÎÀÉú¼äÄÇô¾Í±ØÐë×ñÊØ¹æÔò£¬Õâ¸ö¹æÔò¾ÍÊÇÅŶӣ¬Ö»ÓÐǰһ¸öÈËÓÃÍ깫¹²×ÊÔ´ºóÏÂÒ»¸öÈ˲ſÉÒÔʹÓ㬶øÇÒ²»ÄÜͬʱʹÓã¬ÏëʹÓþͱØÐëÅŶӵȴý¡£

ÉÏÃæÕâ¶Î»°µÀÀí×ã¹»¼òµ¥°É¡£

Èç¹ûÄãÄÜÀí½âÕâ¶Î»°£¬ÄÇôѱ·þ¶àÏß³ÌÕâͷС¹ÖÊ޾Ͳ»ÔÚ»°Ï¡£

ά»¤¹«¹²³¡ËùÖÈÐò

Èç¹û°ÑÄã×Ô¼ºÀí½âΪÏ̵߳ϰ£¬ÄÇôÔÚÄã×Ô¼º¼ÒÀïʹÓÃ˽ÓÐ×ÊÔ´¾ÍÊÇËùνµÄḬ̈߳²È«£¬Ô­ÒòºÜ¼òµ¥£¬ÒòΪÄãËæ±ãÔõôÕÛÌÚ×Ô¼ºµÄ¶«Î÷(×ÊÔ´)¶¼²»»á·Á°­µ½±ðÈË£»

µ«µ½¹«¹²³¡ËùÀ˵ϰ¾Í²»Ò»ÑùÁË£¬ÔÚ¹«¹²³¡ËùʹÓõÄÊǹ«¹²×ÊÔ´£¬ÕâʱÄã¾Í²»ÄÜÏñÔÚ×Ô¼º¼ÒÀïÒ»ÑùÏëÔõôÓþÍÔõôÓÃÏëʲôʱºòÓþÍʲôʱºòÓ㬹«¹²³¡Ëù±ØÐëÓÐÏàÓ¦¹æÔò£¬ÕâÀïµÄ¹æÔòͨ³£ÊÇÅŶӣ¬Ö»ÓÐÕâÑù¹«¹²³¡ËùµÄÖÈÐò²Å²»»á±»ÆÆ»µ£¬Ïß³ÌÒÔijÖÖ²»·Á°­µ½ÆäËüÏ̵߳ÄÖÈÐòʹÓù²Ïí×ÊÔ´¾ÍÄÜʵÏÖḬ̈߳²È«¡£

Òò´ËÎÒÃÇ¿ÉÒÔ¿´µ½£¬ÕâÀïÓÐÁ½ÖÖÇé¿ö£º

Ïß³Ì˽ÓÐ×ÊÔ´£¬Ã»ÓÐḬ̈߳²È«ÎÊÌâ

¹²Ïí×ÊÔ´£¬Ï̼߳äÒÔijÖÖÖÈÐòʹÓù²Ïí×ÊÔ´Ò²ÄÜʵÏÖḬ̈߳²È«¡£

±¾ÎͼÊÇÎ§ÈÆ×ÅÉÏÊöÁ½¸öºËÐĵãÀ´½²½âµÄ£¬ÏÖÔÚÎÒÃǾͿÉÒÔÕýʽµÄÁÄÁıà³ÌÖеÄḬ̈߳²È«ÁË¡£

ʲôÊÇḬ̈߳²È«

ÎÒÃÇ˵һ¶Î´úÂëÊÇḬ̈߳²È«µÄ£¬µ±ÇÒ½öµ±ÎÒÃÇÔÚ¶à¸öÏß³ÌÖÐͬʱÇÒ¶à´Îµ÷ÓõÄÕâ¶Î´úÂë¶¼Äܸø³öÕýÈ·µÄ½á¹û£¬ÕâÑùµÄ´úÂëÎÒÃDzÅ˵ÊÇḬ̈߳²È«´úÂ룬Thread Safety£¬·ñÔò¾Í²»ÊÇḬ̈߳²È«´úÂ룬thread-unsafe.¡£

·ÇḬ̈߳²È«µÄ´úÂëÆäÔËÐнá¹ûÊÇÓÉÖÀ÷»×Ó¾ö¶¨µÄ¡£

ÔõôÑù£¬Ḭ̈߳²È«µÄ¶¨ÒåºÜ¼òµ¥°É£¬Ò²¾ÍÊÇ˵ÄãµÄ´úÂë²»¹ÜÊÇÔÚµ¥¸öÏ̻߳¹ÊǶà¸öÏß³ÌÖб»Ö´Ðж¼Ó¦¸ÃÄܸø³öÕýÈ·µÄÔËÐнá¹û£¬ÕâÑùµÄ´úÂëÊDz»»á³öÏÖ¶àÏß³ÌÎÊÌâµÄ£¬¾ÍÏñÏÂÃæÕâ¶Î´úÂ룺

int func() {
int a = 1;
int b = 1;
return a + b;
}

¶ÔÓÚÕâÑù¶Î´úÂ룬ÎÞÂÛÄãÓöàÉÙÏß³Ìͬʱµ÷Óá¢Ôõôµ÷Óá¢Ê²Ã´Ê±ºòµ÷Óö¼»á·µ»Ø2£¬Õâ¶Î´úÂë¾ÍÊÇḬ̈߳²È«µÄ¡£

ÄÇôÎÒÃǸÃÔõÑùд³öḬ̈߳²È«µÄ´úÂëÄØ£¿

Òª»Ø´ðÕâ¸öÎÊÌ⣬ÎÒÃÇÐèÒªÖªµÀÎÒÃǵĴúÂëʲôʱºò´ôÔÚ×Ô¼º¼ÒÀïʹÓÃ˽ÓÐ×ÊÔ´£¬Ê²Ã´Ê±ºòÈ¥¹«¹²³¡ËùÀËʹÓù«¹²×ÊÔ´£¬Ò²¾ÍÊÇ˵ÄãÐèҪʶ±ðÏ̵߳Ä˽ÓÐ×ÊÔ´ºÍ¹²Ïí×ÊÔ´¶¼ÓÐÄÄЩ£¬ÕâÊǽâ¾öḬ̈߳²È«ÎÊÌâµÄºËÐÄËùÔÚ¡£

Ïß³Ì˽ÓÐ×ÊÔ´

Ï̶߳¼ÓÐÄÄЩ˽ÓÐ×ÊÔ´ÄØ£¿°¡¹þ£¬ÎÒÃÇÔÚÉÏһƪ¡¶Ï̵߳½µ×¹²ÏíÁËÄÄЩ½ø³Ì×ÊÔ´¡·ÖÐÏêϸ½²½âÁËÕâ¸öÎÊÌâ¡£

Ïß³ÌÔËÐеı¾ÖÊÆäʵ¾ÍÊǺ¯ÊýµÄÖ´ÐУ¬º¯ÊýµÄÖ´ÐÐ×Ü»áÓÐÒ»¸öÔ´Í·£¬Õâ¸öÔ´Í·¾ÍÊÇËùνµÄÈë¿Úº¯Êý£¬CPU´ÓÈë¿Úº¯Êý¿ªÊ¼Ö´ÐдӶøÐγÉÒ»¸öÖ´ÐÐÁ÷£¬Ö»²»¹ýÎÒÃÇÈËΪµÄ¸øÖ´ÐÐÁ÷ÆðÒ»¸öÃû×Ö£¬Õâ¸öÃû×־ͽÐÏ̡߳£

¼ÈÈ»Ïß³ÌÔËÐеı¾ÖʾÍÊǺ¯ÊýµÄÖ´ÐУ¬ÄÇôº¯ÊýÔËÐÐʱÐÅÏ¢¶¼±£´æÔÚÄÄÀïÄØ£¿

´ð°¸¾ÍÊÇÕ»Çø£¬Ã¿¸öÏ̶߳¼ÓÐÒ»¸ö˽ÓеÄÕ»Çø£¬Òò´ËÔÚÕ»ÉÏ·ÖÅäµÄ¾Ö²¿±äÁ¿¾ÍÊÇÏß³Ì˽Óеģ¬ÎÞÂÛÎÒÃÇÔõÑùʹÓÃÕâЩ¾Ö²¿±äÁ¿¶¼²»¹ÜÆäËüÏß³ÌÆ¨Ê¡£

Ïß³Ì˽ÓеÄÕ»Çø¾ÍÊÇÏß³Ì×Ô¼º¼Ò¡£

Ï̼߳乲ÏíÊý¾Ý

³ýÁËÉÏÒ»½ÚÌáµ½µÄʣϵÄÇøÓò¾ÍÊǹ«¹²³¡ºÏÁË£¬Õâ°üÀ¨£º

ÓÃÓÚ¶¯Ì¬·ÖÅäÄÚ´æµÄ¶ÑÇø£¬ÎÒÃÇÓÃC/C++ÖеÄmalloc»òÕßnew¾ÍÊÇÔÚ¶ÑÇøÉÏÉêÇëµÄÄÚ´æ

È«¾ÖÇø£¬ÕâÀï´æ·ÅµÄ¾ÍÊÇÈ«¾Ö±äÁ¿

Îļþ£¬ÎÒÃÇÖªµÀÏß³ÌÊǹ²Ïí½ø³Ì´ò¿ªµÄÎļþ

ÓеÄͬѧ¿ÉÄÜ˵£¬µÈµÈ£¬ÔÚÉÏһƪÎÄÕ²»ÊÇ˵»¹ÓдúÂëÇøºÍ¶¯Ì¬Á´½Ó¿âÂð£¿

ÒªÖªµÀÕâÁ½¸öÇøÓòÊDz»Äܱ»Ð޸ĵģ¬Ò²¾ÍÊÇ˵ÕâÁ½¸öÇøÓòÊÇÖ»¶ÁµÄ£¬Òò´Ë¶à¸öÏß³ÌʹÓÃÊÇûÓÐÎÊÌâµÄ¡£

ÔÚ¸Õ²ÅÎÒÃÇÌáµ½µÄ¶ÑÇø¡¢Êý¾ÝÇøÒÔ¼°Îļþ£¬ÕâЩ¾ÍÊÇËùÓеÄÏ̶߳¼¿ÉÒÔ¹²ÏíµÄ×ÊÔ´£¬Ò²¾ÍÊǹ«¹²³¡Ëù£¬Ïß³ÌÔÚÕâЩ¹«¹²³¡Ëù¾Í²»ÄÜËæ±ãÀËÁË¡£

Ïß³ÌʹÓÃÕâЩ¹²Ïí×ÊÔ´±ØÐëÒª×ñÊØÖÈÐò£¬Õâ¸öÖÈÐòµÄºËÐľÍÊǶԹ²Ïí×ÊÔ´µÄʹÓò»ÄÜ·Á°­µ½ÆäËüỊ̈߳¬ÎÞÂÛÄãʹÓø÷ÖÖËøÒ²ºÃ¡¢ÐźÅÁ¿Ò²°Õ£¬ÆäÄ¿µÄ¶¼ÊÇÔÚά»¤¹«¹²³¡ËùµÄÖÈÐò¡£

ÖªµÀÁËÄÄЩÊÇÏß³Ì˽Óеģ¬ÄÄЩÊÇÏ̼߳乲ÏíµÄ£¬½ÓÏÂÀ´¾Í¼òµ¥ÁË¡£

ÖµµÃ×¢ÒâµÄÊÇ£¬¹ØÓÚḬ̈߳²È«µÄÒ»ÇÐÎÊÌâÈ«²¿Î§ÈÆ×ÅÏß³Ì˽ÓÐÊý¾ÝÓëÏ̹߳²ÏíÊý¾ÝÀ´´¦Àí£¬×¥×¡ÁËÏß³Ì˽ÓÐ×ÊÔ´ºÍ¹²Ïí×ÊÔ´Õâ¸öÖ÷Ҫì¶ÜÒ²¾ÍץסÁ˽â¾öḬ̈߳²È«ÎÊÌâµÄºËÐÄ¡£

½ÓÏÂÀ´ÎÒÃÇ¿´ÏÂÔÚ¸÷ÖÖÇé¿öϸÃÔõÑùʵÏÖḬ̈߳²È«£¬ÒÀÈ»ÒÔC/C++´úÂëΪÀý£¬µ«ÊÇÕâÀï½²½âµÄ·½·¨ÊÊÓÃÓÚÈκÎÓïÑÔ£¬Çë·ÅÐÄ£¬ÕâЩ´úÂë×ã¹»¼òµ¥¡£

ֻʹÓÃÏß³Ì˽ÓÐ×ÊÔ´

ÎÒÃÇÀ´¿´Õâ¶Î´úÂ룺

int func() {
int a = 1;
int b = 1;
return a + b;
}

 

Õâ¶Î´úÂëÔÚÇ°ÃæÌáµ½¹ý£¬ÎÞÂÛÄãÔÚ¶àÉÙ¸öÏß³ÌÖÐÔõôµ÷ÓÃʲôʱºòµ÷Óã¬funcº¯Êý¶¼»áÈ·¶¨µÄ·µ»Ø2£¬¸Ãº¯Êý²»ÒÀÀµÈκÎÈ«¾Ö±äÁ¿£¬²»ÒÀÀµÈκκ¯Êý²ÎÊý£¬ÇÒʹÓõľֲ¿±äÁ¿¶¼ÊÇÏß³Ì˽ÓÐ×ÊÔ´£¬ÕâÑùµÄ´úÂëÒ²±»³ÆÎªÎÞ״̬º¯Êý£¬stateless£¬ºÜÏÔÈ»ÕâÑùµÄ´úÂëÊÇḬ̈߳²È«µÄ¡£

ÕâÑùµÄ´úÂëÇë·ÅÐĴ󵨵ÄÔÚ¶àÏß³ÌÖÐʹÓ㬲»»áÓÐÈκÎÎÊÌâ¡£

ÓеÄͬѧ¿ÉÄÜ»á˵£¬ÄÇÈç¹ûÎÒÃÇ»¹ÊÇʹÓÃÏß³Ì˽ÓÐ×ÊÔ´£¬µ«ÊÇ´«È뺯Êý²ÎÊýÄØ£¿

Ïß³Ì˽ÓÐ×ÊÔ´+º¯Êý²ÎÊý

ÕâÑùµÄ´úÂëÊÇḬ̈߳²È«µÄÂð£¿×Ô¼ºÏÈÏëÒ»ÏëÕâ¸öÎÊÌâ¡£

´ð°¸ÊÇit depends£¬Ò²¾ÍÊÇÒª¿´Çé¿ö¡£¿´Ê²Ã´Çé¿öÄØ£¿

1£¬°´Öµ´«²Î

Èç¹ûÄã´«ÈëµÄ²ÎÊýµÄ·½Ê½Êǰ´Öµ´«È룬ÄÇôûÓÐÎÊÌ⣬´úÂëÒÀÈ»ÊÇḬ̈߳²È«µÄ£º

int func(int num) {
num++;
return num;
}

ÕâÕâ¶Î´úÂëÎÞÂÛÔÚ¶àÉÙ¸öÏß³ÌÖе÷ÓÃÔõôµ÷ÓÃʲôʱºòµ÷Óö¼»áÕýÈ··µ»Ø²ÎÊý¼Ó1ºóµÄÖµ¡£

Ô­ÒòºÜ¼òµ¥£¬°´Öµ´«ÈëµÄÕâЩ²ÎÊýÊÇÏß³Ì˽ÓÐ×ÊÔ´¡£

2£¬°´ÒýÓô«²Î

µ«Èç¹ûÊǰ´ÒýÓô«Èë²ÎÊý£¬ÄÇôÇé¿ö¾Í²»Ò»ÑùÁË£º

int func(int* num) {
++(*num);
return *num;
}

Èç¹ûµ÷Óøú¯ÊýµÄÏ̴߳«ÈëµÄ²ÎÊýÊÇÏß³Ì˽ÓÐ×ÊÔ´£¬ÄÇô¸Ãº¯ÊýÒÀÈ»ÊÇḬ̈߳²È«µÄ£¬ÄÜÕýÈ·µÄ·µ»Ø²ÎÊý¼Ó1ºóµÄÖµ¡£

µ«Èç¹û´«ÈëµÄ²ÎÊýÊÇÈ«¾Ö±äÁ¿£¬¾ÍÏñÕâÑù£º

int global_num = 1;
int func(int* num) {
++(*num);
return *num;
}
// Ïß³Ì1
void thread1() {
func(&global_num);
}
// Ïß³Ì2
void thread1() {
func(&global_num);
}

ÄÇ´Ëʱfuncº¯Êý½«²»ÔÙÊÇḬ̈߳²È«´úÂ룬ÒòΪ´«ÈëµÄ²ÎÊýÖ¸ÏòÁËÈ«¾Ö±äÁ¿£¬Õâ¸öÈ«¾Ö±äÁ¿ÊÇËùÓÐÏ߳̿ɹ²Ïí×ÊÔ´£¬ÕâÖÖÇé¿öÏÂÈç¹û²»¸Ä±äÈ«¾Ö±äÁ¿µÄʹÓ÷½Ê½£¬ÄÇô¶Ô¸ÃÈ«¾Ö±äÁ¿µÄ¼Ó1²Ù×÷±ØÐëÊ©¼ÓijÖÖÖÈÐò£¬±ÈÈç¼ÓËø¡£

ÓеÄͬѧ¿ÉÄÜ»á˵Èç¹ûÎÒ´«ÈëµÄ²»ÊÇÈ«¾Ö±äÁ¿µÄÖ¸Õë(ÒýÓÃ)ÊDz»ÊǾͲ»»áÓÐÎÊÌâÁË£¿

´ð°¸ÒÀÈ»ÊÇit depends£¬Òª¿´Çé¿ö¡£

¼´±ãÎÒÃÇ´«ÈëµÄ²ÎÊýÊÇÔÚ¶ÑÉÏ(heap)ÓÃmalloc»ònew³öÀ´µÄ£¬ÒÀÈ»¿ÉÄÜ»áÓÐÎÊÌ⣬Ϊʲô£¿

´ð°¸ºÜ¼òµ¥£¬ÒòΪ¶ÑÉϵÄ×ÊÔ´Ò²ÊÇËùÓÐÏ߳̿ɹ²ÏíµÄ¡£

¼ÙÈçÓÐÁ½¸öÏ̵߳÷ÓÃfuncº¯Êýʱ´«ÈëµÄÖ¸Õë(ÒýÓÃ)Ö¸ÏòÁËͬһ¸ö¶ÑÉϵıäÁ¿£¬ÄÇô¸Ã±äÁ¿¾Í±ä³ÉÁËÕâÁ½¸öÏ̵߳Ĺ²Ïí×ÊÔ´£¬ÔÚÕâÖÖÇé¿öÏÂfuncº¯ÊýÒÀÈ»²»ÊÇḬ̈߳²È«µÄ¡£

¸Ä½øÒ²ºÜ¼òµ¥£¬ÄǾÍÊÇÿ¸öÏ̵߳÷ÓÃfuncº¯Êý´«ÈëÒ»¸ö¶ÀÊôÓÚ¸ÃÏ̵߳Ä×ÊÔ´µØÖ·£¬ÕâÑù¸÷¸öÏ߳̾Ͳ»»á·Á°­µ½¶Ô·½ÁË£¬Òò´Ë£¬Ð´³öḬ̈߳²È«´úÂëµÄÒ»´óÔ­Ôò¾ÍÊÇÄÜÓÃÏß³Ì˽ÓеÄ×ÊÔ´¾ÍÓÃ˽ÓÐ×ÊÔ´£¬Ïß³ÌÖ®¼ä¾¡×î´ó¿ÉÄܲ»È¥Ê¹Óù²Ïí×ÊÔ´¡£

Èç¹ûÏ̲߳»µÃÒÑҪʹÓÃÈ«¾Ö×ÊÔ´ÄØ£¿

ʹÓÃÈ«¾Ö×ÊÔ´

ʹÓÃÈ«¾Ö×ÊÔ´¾ÍÒ»¶¨²»ÊÇḬ̈߳²È«´úÂëÂð£¿

´ð°¸»¹ÊÇ¡£¡£ÓеÄͬѧ¿ÉÄÜÒѾ­²Âµ½ÁË£¬´ð°¸ÒÀÈ»ÊÇÒª¿´Çé¿ö¡£

Èç¹ûʹÓõÄÈ«¾Ö×ÊÔ´Ö»ÔÚ³ÌÐòÔËÐÐʱ³õʼ»¯Ò»´Î£¬´ËºóËùÓдúÂë¶ÔÆäʹÓö¼ÊÇÖ»¶ÁµÄ£¬ÄÇôûÓÐÎÊÌ⣬¾ÍÏñÕâÑù£º

int global_num = 100; //³õʼ»¯Ò»´Î£¬´ËºóûÓÐÆäËü´úÂëÐÞ¸ÄÆäÖµ
int func() {
return global_num;
}

ÎÒÃÇ¿´µ½£¬¼´Ê¹funcº¯ÊýʹÓÃÁËÈ«¾Ö±äÁ¿£¬µ«¸ÃÈ«¾Ö±äÁ¿Ö»ÔÚÔËÐÐǰ³õʼ»¯Ò»´Î£¬´ËºóµÄ´úÂë¶¼²»»á¶ÔÆä½øÐÐÐ޸ģ¬ÄÇôfuncº¯ÊýÒÀÈ»ÊÇḬ̈߳²È«µÄ¡£

µ«£¬Èç¹ûÎÒÃǼòµ¥ÐÞ¸ÄÒ»ÏÂfunc£º

int global_num = 100;
int func() {
++global_num;
return global_num;
}

Õâʱ£¬funcº¯Êý¾Í²»ÔÙÊÇḬ̈߳²È«µÄÁË£¬¶ÔÈ«¾Ö±äÁ¿µÄÐ޸ıØÐë¼ÓËø±£»¤¡£

Ïֲ߳̾¿´æ´¢

½ÓÏÂÀ´ÎÒÃÇÔÙ¶ÔÉÏÊöfuncº¯Êý¼òµ¥Ð޸ģº

__thread int global_num = 100;
int func() {
++global_num;
return global_num;
}

ÎÒÃÇ¿´µ½È«¾Ö±äÁ¿global_numǰ¼ÓÁ˹ؼü´Ê__threadÐÞÊΣ¬Õâʱ£¬func´úÂë¾ÍÊÇÓÖÊÇḬ̈߳²È«µÄÁË¡£

ÎªÊ²Ã´ÄØ£¿

ÆäʵÔÚÉÏһƪÎÄÕÂÖÐÎÒÃǽ²¹ý£¬±»__thread¹Ø¼ü´ÊÐÞÊιýµÄ±äÁ¿·ÅÔÚÁËÏß³Ì˽Óд洢ÖУ¬Thread Local Storage£¬Ê²Ã´ÒâË¼ÄØ£¿

Òâ˼ÊÇ˵Õâ¸ö±äÁ¿ÊÇÏß³Ì˽ÓеÄÈ«¾Ö±äÁ¿£º

global_numÊÇÈ«¾Ö±äÁ¿

global_numÊÇÏß³Ì˽ÓеÄ

¸÷¸öÏ̶߳Ôglobal_numµÄÐ޸IJ»»áÓ°Ïìµ½ÆäËüỊ̈߳¬ÒòΪÊÇÏß³Ì˽ÓÐ×ÊÔ´£¬Òò´Ëfuncº¯ÊýÊÇḬ̈߳²È«µÄ¡£

˵ÍêÁ˾ֲ¿±äÁ¿¡¢È«¾Ö±äÁ¿¡¢º¯Êý²ÎÊý£¬ÄÇô½ÓÏÂÀ´¾Íµ½º¯Êý·µ»ØÖµÁË¡£

º¯Êý·µ»ØÖµ

ÕâÀïÒ²ÓÐÁ½ÖÖÇé¿ö£¬Ò»ÖÖÊǺ¯Êý·µ»ØµÄÊÇÖµ£»ÁíÒ»ÖÖ·µ»Ø¶Ô±äÁ¿µÄÒýÓá£

1£¬·µ»ØµÄÊÇÖµ

ÎÒÃÇÀ´¿´ÕâÑùÒ»¶Î´úÂ룺

int func() {
int a = 100;
return a;
}

ºÁÎÞÒÉÎÊ£¬Õâ¶Î´úÂëÊÇḬ̈߳²È«µÄ£¬ÎÞÂÛÎÒÃÇÔõÑùµ÷Óøú¯Êý¶¼»á·µ»ØÈ·¶¨µÄÖµ100¡£

2£¬·µ»ØµÄÊÇÒýÓÃ

ÎÒÃǰÑÉÏÊö´úÂë¼òµ¥µÄ¸ÄÒ»¸Ä£º

int* func() {
static int a = 100;
return &a;
}

 

Èç¹ûÎÒÃÇÔÚ¶àÏß³ÌÖе÷ÓÃÕâÑùµÄº¯Êý£¬ÄÇô½ÓÏÂÀ´µÈ×ÅÄãµÄ¿ÉÄܾÍÊÇÄÑÒÔµ÷ÊÔµÄbugÒÔ¼°ÂþÂþµÄ¼Ó°à³¤Ò¹¡£¡£

ºÜÏÔÈ»£¬Õâ²»ÊÇḬ̈߳²È«´úÂ룬²úÉúbugµÄÔ­ÒòÒ²ºÜ¼òµ¥£¬ÄãÔÚʹÓøñäÁ¿Ç°ÆäÖµ¿ÉÄÜÒѾ­±»ÆäËüÏß³ÌÐÞ¸ÄÁË¡£ÒòΪ¸Ãº¯ÊýʹÓÃÁËÒ»¸ö¾²Ì¬È«¾Ö±äÁ¿£¬Ö»ÒªÄÜÄõ½¸Ã±äÁ¿µÄµØÖ·ÄÇôËùÓÐÏ̶߳¼¿ÉÒÔÐ޸ĸñäÁ¿µÄÖµ£¬ÒòΪÕâÊÇÏ̼߳äµÄ¹²Ïí×ÊÔ´£¬²»µ½Íò²»µÃÒѲ»ÒªÐ´³öÉÏÊö´úÂ룬³ý·ÇÀϰåÄõ¶¼ÜÔÚÄã²±×ÓÉÏ¡£

µ«ÊÇ£¬Çë×¢Ò⣬ÓÐÒ»¸öÌØÀý£¬ÕâÖÖʹÓ÷½·¨¿ÉÒÔÓÃÀ´ÊµÏÖÉè¼ÆÄ£Ê½Öеĵ¥Àýģʽ£¬¾ÍÏñÕâÑù£º

class S {
public:
static S& getInstance() {
static S instance;
return instance;
}
private:
S() {}
// ÆäËüÊ¡ÂÔ
}

ÎªÊ²Ã´ÄØ£¿

ÒòΪÎÞÂÛÎÒÃǵ÷ÓöàÉÙ´Îfuncº¯Êý£¬static¾Ö²¿±äÁ¿¶¼Ö»»á±»³õʼ»¯Ò»´Î£¬ÕâÖÖÌØÐÔ¿ÉÒԺܷ½±ãµÄÈÃÎÒÃÇʵÏÖµ¥Àýģʽ¡£

×îºóÈÃÎÒÃÇÀ´¿´ÏÂÕâÖÖÇé¿ö£¬ÄǾÍÊÇÈç¹ûÎÒÃǵ÷ÓÃÒ»¸ö·ÇḬ̈߳²È«µÄº¯Êý£¬ÄÇôÎÒÃǵĺ¯ÊýÊÇḬ̈߳²È«µÄÂð£¿

µ÷Ó÷ÇḬ̈߳²È«´úÂë

¼ÙÈçÒ»¸öº¯ÊýAµ÷ÓÃÁíÒ»¸öº¯ÊýB£¬µ«B²»ÊÇḬ̈߳²È«£¬ÄÇôº¯ÊýAÊÇḬ̈߳²È«µÄÂð£¿

´ð°¸ÒÀÈ»ÊÇ£¬Òª¿´Çé¿ö¡£

ÎÒÃÇ¿´ÏÂÕâÑùÒ»¶Î´úÂ룬Õâ¶Î´úÂëÔÚ֮ǰ½²½â¹ý£º

int global_num = 0;
int func() {
++global_num;
return global_num;
}

ÎÒÃÇÈÏΪfuncº¯ÊýÊÇ·ÇḬ̈߳²È«µÄ£¬ÒòΪfuncº¯ÊýʹÓÃÁËÈ«¾Ö±äÁ¿²¢¶ÔÆä½øÐÐÁËÐ޸쬵«Èç¹ûÎÒÃÇÕâÑùµ÷ÓÃfuncº¯Êý£º

int funcA() {
mutex l;
l.lock();
func();
l.unlock();
}

ËäÈ»funcº¯ÊýÊÇ·ÇḬ̈߳²È«µÄ£¬µ«ÊÇÎÒÃÇÔÚµ÷Óøú¯Êýǰ¼ÓÁËÒ»°ÑËø½øÐб£»¤£¬ÄÇôÕâʱfuncAº¯Êý¾ÍÊÇḬ̈߳²È«µÄÁË£¬Æä±¾ÖʾÍÊÇÎÒÃÇÓÃÒ»°ÑËø¼ä½ÓµÄ±£»¤ÁËÈ«¾Ö±äÁ¿¡£

ÔÙ¿´ÕâÑùÒ»¶Î´úÂ룺

int func(int *num) {
++(*num);
return *num;
}

Ò»°ãÎÒÃÇÈÏΪfuncº¯ÊýÊÇ·ÇḬ̈߳²È«µÄ£¬ÒòΪÎÒÃDz»ÖªµÀ´«ÈëµÄÖ¸ÕëÊDz»ÊÇÖ¸ÏòÁËÒ»¸öÈ«¾Ö±äÁ¿£¬µ«Èç¹ûµ÷ÓÃfuncº¯ÊýµÄ´úÂëÊÇÕâÑùµÄ£º

void funcA() {
int a = 100;
func(&a);
}

ÄÇôÕâʱfuncAº¯ÊýÒÀÈ»ÊÇḬ̈߳²È«µÄ£¬ÒòΪ´«ÈëµÄ²ÎÊýÊÇÏß³Ì˽Óеľֲ¿±äÁ¿£¬ÎÞÂÛ¶àÉÙÏ̵߳÷ÓÃfuncA¶¼²»»á¸ÉÈŵ½ÆäËüÏ̡߳£

¿´Á˸÷ÖÖÇé¿öϵÄḬ̈߳²È«ÎÊÌ⣬×îºóÈÃÎÒÃÇÀ´×ܽáÒ»ÏÂʵÏÖḬ̈߳²È«´úÂë¶¼ÓÐÄÄЩ´ëÊ©¡£

ÈçºÎʵÏÖḬ̈߳²È«

´ÓÉÏÃæ¸÷ÖÖÇé¿öµÄ·ÖÎöÀ´¿´£¬ÊµÏÖḬ̈߳²È«ÎÞÍâºõÎ§ÈÆÏß³Ì˽ÓÐ×ÊÔ´ºÍÏ̹߳²Ïí×ÊÔ´ÕâÁ½µã£¬ÄãÐèҪʶ±ð³öÄÄЩÊÇÏß³Ì˽ÓУ¬ÄÄЩÊǹ²ÏíµÄ£¬ÕâÊǺËÐÄ£¬È»ºó¶ÔÖ¢ÏÂÒ©¾Í¿ÉÒÔÁË¡£

²»Ê¹ÓÃÈκÎÈ«¾Ö×ÊÔ´£¬Ö»Ê¹ÓÃÏß³Ì˽ÓÐ×ÊÔ´£¬ÕâÖÖͨ³£±»³ÆÎªÎÞ״̬´úÂë

Ïֲ߳̾¿´æ´¢£¬Èç¹ûҪʹÓÃÈ«¾Ö×ÊÔ´£¬ÊÇ·ñ¿ÉÒÔÉùÃ÷ΪÏֲ߳̾¿´æ´¢£¬ÒòΪÕâÖÖ±äÁ¿ËäÈ»ÊÇÈ«¾ÖµÄ£¬µ«Ã¿¸öÏ̶߳¼ÓÐÒ»¸öÊôÓÚ×Ô¼ºµÄ¸±±¾£¬¶ÔÆäÐ޸IJ»»áÓ°Ïìµ½ÆäËüÏß³Ì

Ö»¶Á£¬Èç¹û±ØÐëʹÓÃÈ«¾Ö×ÊÔ´£¬ÄÇôȫ¾Ö×ÊÔ´ÊÇ·ñ¿ÉÒÔÊÇÖ»¶ÁµÄ£¬¶àÏß³ÌʹÓÃÖ»¶ÁµÄÈ«¾Ö×ÊÔ´²»»áÓÐḬ̈߳²È«ÎÊÌâ¡£

Ô­×Ó²Ù×÷£¬Ô­×Ó²Ù×÷ÊÇ˵ÆäÔÚÖ´Ðйý³ÌÖÐÊDz»¿ÉÄܱ»ÆäËüÏ̴߳ò¶ÏµÄ£¬ÏñC++ÖеÄstd::atomicÐÞÊιýµÄ±äÁ¿£¬¶ÔÕâÀà±äÁ¿µÄ²Ù×÷ÎÞÐ贫ͳµÄ¼ÓËø±£»¤£¬ÒòΪC++»áÈ·±£ÔÚ±äÁ¿µÄÐ޸Ĺý³ÌÖв»»á±»´ò¶Ï¡£ÎÒÃdz£ËµµÄ¸÷ÖÖÎÞËøÊý¾Ý½á¹¹Í¨³£ÊÇÔÚÕâÀàÔ­×Ó²Ù×÷µÄ»ù´¡ÉϹ¹½¨µÄ ¡£

ͬ²½»¥³â£¬µ½ÕâÀïÒ²¾ÍÈ·¶¨ÁËÄã±ØÐëÒªÒÔijÖÖÐÎʽʹÓÃÈ«¾Ö×ÊÔ´£¬ÄÇôÔÚÕâÖÖÇé¿öϹ«¹²³¡ËùµÄÖÈÐò±ØÐëµÃµ½Î¬»¤£¬ÄÇôÔõôά»¤ÄØ£¿Í¨¹ýͬ²½»òÕß»¥³âµÄ·½Ê½£¬ÕâÊÇÒ»´óÀàÎÊÌ⣬ÎÒÃǽ«ÔÚ¡¶ÉîÈëÀí½â²Ù×÷ϵͳ¡·ÏµÁÐÎÄÕÂÖÐÏêϸ²ûÊöÕâÒ»ÎÊÌâ¡£

×ܽá

ÔõôÑù£¬Ïëд³öḬ̈߳²È«µÄ»¹ÊDz»¼òµ¥µÄ°É£¬Èç¹û±¾ÎÄÄãÖ»ÄܼÇסһ¾ä»°µÄ»°£¬ÄÇôÎÒÏ£ÍûÊÇÕâ¾ä£¬ÕâÒ²ÊDZ¾ÎĵĺËÐÄ£º

ʵÏÖḬ̈߳²È«ÎÞÍâºõÎ§ÈÆÏß³Ì˽ÓÐ×ÊÔ´ºÍÏ̹߳²Ïí×ÊÔ´À´½øÐУ¬ÄãÐèҪʶ±ð³öÄÄЩÊÇÏß³Ì˽ÓУ¬ÄÄЩÊǹ²ÏíµÄ£¬È»ºó¶ÔÖ¢ÏÂÒ©¾Í¿ÉÒÔÁË¡£

Ï£Íû±¾ÎĶԴó¼Ò±àд¶àÏ̳߳ÌÐòÓаïÖú¡£

   
2443 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
´úÂëÕû½à vs ´úÂë°¹Ôà
´úÂëÉó¼Æ--Ô´´úÂëÉó¼ÆË¼Â·
´úÂëÉó¼ÆË¼Â·
´úÂëÖØ¹¹Ö®µÀ
clean code´úÂëÕû½à
×îпγÌ
Éè¼ÆÄ£Ê½Ô­ÀíÓëÓ¦ÓÃ
´ÓÐèÇó¹ý¶Éµ½Éè¼Æ
Èí¼þÉè¼ÆÔ­ÀíÓëʵ¼ù
ÈçºÎ±àд¸ßÖÊÁ¿´úÂë
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
³É¹¦°¸Àý
ijÆóÒµ »ùÓÚIPDµÄǶÈëʽÈí¼þ¿ª·¢
ijÆóÒµ ×ÔÎÒÈÏÖª¡¢ÇéÐ÷¹ÜÀíºÍ¹µÍ¨
ijÆóÒµ ˼άµ¼Í¼·½·¨Óëʵ¼ù
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜ
ÊÀ¼Í¸ßͨ ´´Ð´´ÔìÍ»ÆÆÐÔ²úÆ·¡ª¡ªÌåϵ