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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Python²¢·¢±à³Ì£ºËø¡¢ÐźÅÁ¿ºÍÌõ¼þ±äÁ¿
 
  2881  次浏览      27
 2019-1-14 
 
±à¼­ÍƼö:
À´Ô´Github £¬ÔÚ´ó¶àÊýϵͳÉÏ,Pythonͬʱ֧³ÖÏûÏ¢´«µÝºÍ»ùÓÚÏ̵߳IJ¢·¢±à³Ì¡£±¾ÎÄÖ÷Òª½²½âËø¡¢ÐźÅÁ¿ºÍÌõ¼þ±äÁ¿£¬ÏêÇéÇë²ÎÔÄÏÂÎÄ¡£

·Ö²¼Ê½ºÍ²¢ÐмÆËã

1 ÒýÑÔ

ÕâÒ»ÕÂÖУ¬ÎÒÃÇÌø×ªµ½Ð­µ÷¶à¸ö¼ÆËã»úºÍ´¦ÀíÆ÷µÄÎÊÌâ¡£Ê×ÏÈ£¬ÎÒÃÇ»á¹Û²ì·Ö²¼Ê½ÏµÍ³¡£ËüÃÇÊÇ»¥ÏàÁ¬½ÓµÄ¶ÀÁ¢¼ÆËã»ú£¬ÐèÒª»¥Ï๵ͨÀ´Íê³ÉÈÎÎñ¡£ËüÃÇ¿ÉÄÜÐèҪЭ×÷À´Ìṩ·þÎñ£¬¹²ÏíÊý¾Ý£¬»òÕßÉõÖÁÊÇ´¢´æÌ«´ó¶ø²»ÄÜÔÚһ̨»úÆ÷ÉÏװϵÄÊý¾Ý¡£ÎÒÃǻῴµ½£¬¼ÆËã»ú¿ÉÒÔÔÚ·Ö²¼Ê½ÏµÍ³ÖÐÆðµ½²»Í¬×÷Ó㬲¢ÇÒÁ˽â¸÷ÖÖÐÅÏ¢£¬¼ÆËã»úÐèÒª½»»»ËüÃÇÀ´¹²Í¬¹¤×÷¡£

½ÓÏÂÀ´£¬ÎÒÃǻῼÂDz¢ÐмÆËã¡£²¢ÐмÆËãÊÇÕâÑù£¬µ±Ò»¸öС³ÌÐòÓɶà¸ö´¦ÀíÆ÷ʹÓù²ÏíÄÚ´æÖ´ÐÐʱ£¬ËùÓд¦ÀíÆ÷¶¼²¢Ðй¤×÷À´Ê¹ÈÎÎñÍê³ÉµÃ¸ü¿ì¡£²¢·¢(»ò²¢ÐÐ)ÒýÈëÁËеÄÌôÕ½£¬²¢ÇÒÎÒÃǻῪ·¢ÐµĻúÖÆÀ´¹ÜÀí²¢·¢³ÌÐòµÄ¸´ÔÓÐÔ¡£

2 ·Ö²¼Ê½ÏµÍ³

·Ö²¼Ê½ÏµÍ³ÊÇ×ÔÖ÷µÄ¼ÆËã»úÍøÂ磬¼ÆËã»ú»¥ÏàͨÐÅÀ´Íê³ÉÒ»¸öÄ¿±ê¡£·Ö²¼Ê½ÏµÍ³ÖеļÆËã»ú¶¼ÊǶÀÁ¢µÄ£¬²¢ÇÒûÓÐÎïÀíÉϹ²ÏíµÄÄÚ´æ»ò´¦ÀíÆ÷¡£ËüÃÇʹÓÃÏûÏ¢À´ºÍÆäËü¼ÆËã»úͨÐÅ£¬ÏûÏ¢ÊÇÍøÂçÉÏ´Óһ̨¼ÆËã»úµ½Áíһ̨¼ÆËã»ú´«ÊäµÄÒ»¶ÎÐÅÏ¢¡£ÏûÏ¢¿ÉÒÔÓÃÓÚ¹µÍ¨Ðí¶àÊÂÇ飺¼ÆËã»ú¿ÉÒÔÈÃÆäËü¼ÆËã»úÀ´Ö´ÐÐÒ»¸ö´øÓÐÌØ¶¨²ÎÊýµÄ¹ý³Ì£¬ËüÃÇ¿ÉÒÔ·¢ËͺͽÓÊÜÊý¾Ý°ü£¬»òÕß·¢ËÍÐźÅÈÃÆäËü¼ÆËã»úÖ´ÐÐÌØ¶¨ÐÐΪ¡£

·Ö²¼Ê½ÏµÍ³ÖеļÆËã»ú¾ßÓв»Í¬µÄ×÷Ó᣼ÆËã»úµÄ×÷ÓÃÈ¡¾öÓÚϵͳµÄÄ¿±ê£¬ÒÔ¼°¼ÆËã»ú×ÔÉíµÄÓ²¼þºÍÈí¼þÊôÐÔ¡£·Ö²¼Ê½ÏµÍ³ÖУ¬ÓÐÁ½ÖÖÖ÷Òª·½Ê½À´×éÖ¯¼ÆËã»ú£¬Ò»Öֽпͻ§¶Ë-·þÎñ¶Ë¼Ü¹¹(C/S ¼Ü¹¹)£¬ÁíÒ»ÖÖ½Ð×ö¶ÔµÈÍøÂç¼Ü¹¹(P2P ¼Ü¹¹)¡£

2.1 C/S ϵͳ

C/S ¼Ü¹¹ÊÇÒ»ÖÖ´ÓÖÐÐÄÀ´Ô´·Ö·¢·þÎñµÄ·½Ê½¡£Ö»Óе¥¸ö·þÎñ¶ËÌṩ·þÎñ£¬¶ą̀¿Í»§¶ËºÍ·þÎñÆ÷ͨÐÅÀ´ÏûºÄËüµÄ²ú³ö¡£ÔÚÕâ¸ö¼Ü¹¹ÖУ¬¿Í»§¶ËºÍ·þÎñ¶Ë¶¼Óв»Í¬µÄÈÎÎñ¡£·þÎñ¶ËµÄÈÎÎñ¾ÍÊÇÏìÓ¦À´×Ô¿Í»§¶ËµÄ·þÎñÇëÇ󣬶ø¿Í»§¶ËµÄÈÎÎñ¾ÍÊÇʹÓÃÏìÓ¦ÖÐÌṩµÄÊý¾ÝÀ´Ö´ÐÐһЩÈÎÎñ¡£

 

C/S ͨÐÅÄ£ÐÍ¿ÉÒÔ×·Ëݵ½¶þÊ®ÊÀ¼ÍÆßÊ®Äê´ú Unix µÄÒýÈ룬µ«ÕâһģÐÍÓÉÓÚÏÖ´úÍòÎ¬Íø(WWW)ÖеÄʹÓöø±äµÃ¾ßÓÐÓ°ÏìÁ¦¡£Ò»¸öC/S ½»»¥µÄÀý×Ó¾ÍÊÇÔÚÏßÔĶÁŦԼʱ±¨¡£µ± www.nytimes.com ÉϵķþÎñÆ÷Óëä¯ÀÀÆ÷¿Í»§¶Ë(±ÈÈç Firefox)ͨÐÅʱ£¬ËüµÄÈÎÎñ¾ÍÊÇ·¢ËÍ»ØÀ´Å¦Ô¼Ê±±¨Ö÷Ò³µÄ HTML¡£Õâ¿ÉÄÜÉæ¼°µ½»ùÓÚ·¢Ë͸ø·þÎñÆ÷µÄÓû§ÕË»§ÐÅÏ¢£¬¼ÆËã¸öÐÔ»¯µÄÄÚÈÝ¡£ÕâÒâζ×ÅÐèҪչʾͼƬ£¬°²ÅÅÊÓ¾õÉϵÄÄÚÈÝ£¬Õ¹Ê¾²»Í¬µÄÑÕÉ«¡¢×ÖÌåºÍͼÐΣ¬ÒÔ¼°ÔÊÐíÓû§ºÍäÖȾºóµÄÒ³Ãæ½»»¥¡£

¿Í»§¶ËºÍ·þÎñ¶ËµÄ¸ÅÄîÊÇÇ¿´óµÄº¯Êýʽ³éÏ󡣿ͻ§¶Ë½ö½öÊÇÒ»¸öÌṩ·þÎñµÄµ¥Î»£¬¿ÉÄÜͬʱ¶ÔÓ¦¶à¸ö¿Í»§¶Ë¡£¿Í»§¶ËÊÇÏûºÄ·þÎñµÄµ¥Î»¡£¿Í»§¶Ë²¢²»ÐèÒªÖªµÀ·þÎñÈçºÎÌṩµÄϸ½Ú£¬»òÕßËù»ñÈ¡µÄÊý¾ÝÈçºÎ´¢´æºÍ¼ÆË㣬·þÎñ¶ËÒ²²»ÐèÒªÖªµÀÊý¾ÝÈçºÎʹÓá£

ÔÚÍøÂçÉÏ£¬ÎÒÃÇÈÏΪ¿Í»§¶ËºÍ·þÎñ¶Ë¶¼ÊDz»Í¬µÄ»úÆ÷£¬µ«ÊÇ£¬Ò»¸ö»úÆ÷ÉϵÄϵͳҲ¿ÉÒÔÓµÓÐ C/S ¼Ü¹¹¡£ÀýÈ磬À´×Ô¼ÆËã»úÊäÈëÉ豸µÄÐźÅÐèÒªÈÃÔËÐÐÔÚ¼ÆËã»úÉϵijÌÐòÀ´·ÃÎÊ¡£ÕâЩ³ÌÐò¾ÍÊǿͻ§¶Ë£¬ÏûºÄÊó±êºÍ¼üÅ̵ÄÊäÈëÊý¾Ý¡£²Ù×÷ϵͳµÄÉ豸Çý¶¯¾ÍÊÇ·þÎñ¶Ë£¬½ÓÊÜÎïÀíµÄÐźŲ¢½«ËüÃÇÌṩΪ¿ÉÓõÄÊäÈë¡£

C/S ϵͳµÄÒ»¸öȱÏݾÍÊÇ£¬·þÎñ¶ËÊǹÊÕϵ¥µã¡£ËüÊÇΨһÄܹ»·Ö·¢·þÎñµÄ×é¼þ¡£¿Í»§¶ËµÄÊýÁ¿¿ÉÒÔÊÇÈÎÒâµÄ£¬ËüÃÇ¿ÉÒÔ½»Ì棬²¢ÇÒ¿ÉÒÔ°´Ðè³öÏÖºÍÏûʧ¡£µ«ÊÇÈç¹û·þÎñÆ÷±ÀÀ£ÁË£¬Õû¸öϵͳ¾Í»áÍ£Ö¹¹¤×÷¡£ËùÒÔ£¬ÓÉ C/S ¼Ü¹¹´´½¨µÄº¯Êýʽ³éÏóҲʹËü¾ßÓбÀÀ£µÄ·çÏÕ¡£

C/S ϵͳµÄÁíÒ»¸öȱÏÝÊÇ£¬µ±¿Í»§¶Ë·Ç³£¶àµÄʱºò£¬×ÊÔ´¾Í±äµÃϡȱ¡£¿Í»§¶ËÔö¼ÓϵͳÉϵÄÃüÁî¶ø²»¹±Ï×ÈκμÆËã×ÊÔ´¡£C/S ϵͳ²»ÄÜËæ×Ų»¶Ï±ä»¯µÄÐèÇóËõС»òÀ©´ó¡£

2.2 P2P ϵͳ

C/S Ä£ÐÍÊʺÏÓÚ·þÎñµ¼ÏòµÄÇéÐΡ£µ«ÊÇ£¬»¹ÓÐÆäËü¼ÆËãÄ¿±ê£¬ÊʺÏʹÓøü¼ÓƽµÈµÄ·Ö¹¤¡£P2P µÄÊõÓïÓÃÓÚÃèÊöÒ»ÖÖ·Ö²¼Ê½ÏµÍ³£¬ÆäÖÐÀͶ¯Á¦·Ö²¼ÔÚϵͳµÄËùÓÐ×é¼þÖС£ËùÓмÆËã»ú·¢ËͲ¢½ÓÊÜÊý¾Ý£¬ËüÃǶ¼¹±Ï×һЩ´¦ÀíÄÜÁ¦ºÍÄÚ´æ¡£Ëæ×Å·Ö²¼Ê½ÏµÍ³µÄ¹æÄ£Ôö³¤£¬ËüµÄ×ÊÔ´¼ÆËãÄÜÁ¦Ò²»áÔö³¤¡£ÔÚ P2P ϵͳÖУ¬ÏµÍ³µÄËùÓÐ×é¼þ¶¼¶Ô·Ö²¼Ê½¼ÆËã¹±Ï×ÁËһЩ´¦ÀíÄÜÁ¦ºÍÄÚ´æ¡£

ËùÓвÎÓëÕßµÄÀͶ¯Á¦µÄ·Ö¹¤ÊÇ P2P ϵͳµÄʶ±ðÌØÕ÷¡£Ò²¾ÍÊÇ˵£¬¶ÔµÈÕßÐèÒªÄܹ»ºÍÆäËüÈ˿ɿ¿µØÍ¨ÐÅ¡£ÎªÁËÈ·±£ÏûÏ¢µ½´ïÔ¤¶¨µÄÄ¿µÄµØ£¬P2P ϵͳÐèÒª¾ßÓÐ×éÖ¯Á¼ºÃµÄÍøÂç½á¹¹¡£ÕâЩϵͳÖеÄ×é¼þЭ×÷À´Î¬»¤×ã¹»µÄÆäËü×é¼þµÄλÖÃÐÅÏ¢²¢½«ÏûÏ¢·¢Ë͵½Ô¤¶¨µÄÄ¿µÄµØ¡£

ÔÚһЩ P2P ϵͳÖУ¬Î¬»¤ÍøÂ罡¿µµÄÈÎÎñÓÉһϵÁÐÌØÊâµÄ×é¼þÖ´ÐС£ÕâÖÖϵͳ²¢²»ÊÇ´¿´âµÄ P2P ϵͳ£¬ÒòΪËüÃǾßÓв»Í¬ÀàÐ͵Ä×é¼þÀàÐÍ£¬Ìṩ²»Í¬µÄ¹¦ÄÜ¡£Ö§³Ö P2P ÍøÂçµÄ×é¼þ¾ÍÏñ½ÅÊÖ¼ÜÄÇÑù£ºËüÃÇÓÐÖúÓÚÍøÂç±£³ÖÁ¬½Ó£¬ËüÃÇά»¤²»Í¬¼ÆËã»úµÄλÖÃÐÅÏ¢£¬²¢ÇÒËüÃÇÐÂÀ´ÕßÀ´ÁÚ¾ÓÖÐÕÒµ½Î»Öá£

P2P ϵͳµÄ×î³£¼ûÓ¦ÓþÍÊÇÊý¾Ý´«Ëͺʹ洢¡£¶ÔÓÚÊý¾Ý´«ËÍ£¬ÏµÍ³ÖеÄÿ̨¼ÆËã»ú¶¼ÖÂÁ¦ÓÚÍøÂçÉϵÄÊý¾Ý´«ËÍ¡£Èç¹ûÄ¿±ê¼ÆËã»úÊÇÌØ¶¨¼ÆËã»úµÄÁÚ¾Ó£¬ÄÇ̨¼ÆËã»ú¾ÍÒ»Æð°ïÖú´«ËÍÊý¾Ý¡£¶ÔÓÚÊý¾Ý´æ´¢£¬Êý¾Ý¼¯¿ÉÒÔ¹ýÓÚÅӴ󣬲»ÄÜÔÚÈκε¥Ì¨¼ÆËã»úÄÚ×°Ï£¬»òÕß´¢´æÔÚµ¥Ì¨¼ÆËã»úÄÚ¾ßÓзçÏÕ¡£Ã¿Ì¨¼ÆËã»ú¶¼´¢´æÊý¾ÝµÄһС²¿·Ö£¬²»Í¬µÄ¼ÆËã»úÉÏ¿ÉÄܻᴢ´æÏàͬÊý¾ÝµÄ¶à¸ö¸±±¾¡£µ±Ò»Ì¨¼ÆËã»ú±ÀÀ£Ê±£¬ÉÏÃæµÄÊý¾Ý¿ÉÒÔÓÉÆäËü¸±±¾»Ö¸´£¬»òÕßÔÚ¸ü»»Ìæ´úÆ·Ö®ºó·Å»Ø¡£

Skype£¬Ò»¸öÒôƵºÍÊÓÆµÁÄÌì·þÎñ£¬ÊDzÉÓà P2P ¼Ü¹¹µÄÊý¾Ý´«ËÍÓ¦ÓõÄʾÀý¡£µ±²»Í¬¼ÆËã»úÉϵÄÁ½¸öÈ˶¼Ê¹Óà Skype ½»Ì¸Ê±£¬ËüÃǵÄͨÐÅ»á²ð³ÉÓÉ 1 ºÍ 0 ¹¹³ÉµÄÊý¾Ý°ü£¬²¢ÇÒͨ¹ý P2P ÍøÂç´«²¥¡£Õâ¸öÍøÂçÓɵçÄÔÉÏ×¢²áÁË Skype µÄÆäËüÈË×é³É¡£Ã¿Ì¨¼ÆËã»ú¶¼ÖªµÀ¸½½üÆäËüÈ˵ÄλÖá£Ò»Ì¨¼ÆËã»úͨ¹ý½«Êý¾Ý°ü´«¸øËüµÄÁÚ¾Ó£¬À´°ïÖú½«Ëü´«µ½Ä¿µÄµØ£¬ËüµÄÁÚ¾ÓÓÖ½«Ëü´«¸øÆäËüÁÚ¾Ó£¬ÒÔ´ËÀàÍÆ£¬Ö±µ½Êý¾Ý°üµ½´ïÁËËüÔ¤¶¨µÄÄ¿µÄµØ¡£Skype ²¢²»ÊÇ´¿´âµÄ P2P ϵͳ¡£Ò»¸ö³¬¼¶½Úµã×é³ÉµÄ½ÅÊÖ¼ÜÍøÂçÓÃÓÚÓû§µÇ¼ºÍÍ˳ö£¬Î¬»¤ËüÃǵļÆËã»úµÄλÖÃÐÅÏ¢£¬²¢ÇÒÐÞ¸ÄÍøÂç½á¹¹À´´¦ÀíÓû§½øÈëºÍÀ뿪¡£

2.3 Ä£¿é»¯

ÎÒÃǸղſ¼ÂǵÄÁ½¸ö¼Ü¹¹ -- P2P ºÍ C/S -- ¶¼ÎªÇ¿ÖÆÄ£¿é»¯¶øÉè¼Æ¡£Ä£¿é»¯ÊÇÒ»¸ö¸ÅÄϵͳµÄ×é¼þ¶ÔÆäËü×é¼þÀ´ËµÓ¦¸ÃÊǸöºÚºÐ¡£×é¼þÈçºÎʵÏÖÐÐΪӦ¸Ã²¢²»ÖØÒª£¬Ö»ÒªËüÌṩÁËÒ»¸ö½Ó¿Ú£º¹æ¶¨ÁËÊäÈëÓ¦¸Ã²úÉúʲôÊä³ö¡£

ÔÚµÚ¶þÕÂÖУ¬ÎÒÃÇÔÚµ÷¶Èº¯ÊýºÍÃæÏò¶ÔÏó±à³ÌµÄÉÏÏÂÎÄÖÐÓöµ½Á˽ӿڡ£ÕâÀ½Ó¿ÚµÄÐÎʽΪָ¶¨¶ÔÏóÓ¦½ÓÊÕµÄÐÅÏ¢£¬ÒÔ¼°¶ÔÏóÓ¦ÈçºÎÏìÓ¦ËüÃÇ¡£ÀýÈ磬ΪÁËÌṩ¡°±íʾΪ×Ö·û´®¡±µÄ½Ó¿Ú£¬¶ÔÏó±ØÐë»Ø¸´ __repr__ ºÍ __str__ ÐÅÏ¢£¬²¢ÇÒÔÚÏìÓ¦ÖÐÊä³öºÏÊʵÄ×Ö·û´®¡£ÄÇЩ×Ö·û´®µÄÉú³ÉÈçºÎʵÏÖ²¢²»ÊǽӿڵÄÒ»²¿·Ö¡£

ÔÚ·Ö²¼Ê½ÏµÍ³ÖУ¬ÎÒÃDZØÐ뿼ÂÇÉæ¼°µ½¶ą̀¼ÆËã»úµÄ³ÌÐòÉè¼Æ£¬ËùÒÔÎÒÃǽ«½Ó¿ÚµÄ¸ÅÄî´Ó¶ÔÏóºÍÏûÏ¢À©Õ¹ÎªÕû¸ö³ÌÐò¡£½Ó¿ÚÖ¸¶¨ÁËÓ¦¸Ã½ÓÊܵÄÊäÈ룬ÒÔ¼°Ó¦¸ÃÔÚÏìÓ¦Öзµ»Ø¸øÊäÈëµÄÊä³ö¡£

½Ó¿ÚÔÚÕæÊµÊÀ½çµÄÈκεط½¶¼´æÔÚ£¬ÎÒÃǾ­³£Ï°ÒÔΪ³£¡£Ò»¸öÊìϤµÄÀý×Ó¾ÍÊÇ TV Ò£¿ØÆ÷¡£Äã¿ÉÒÔÂòµ½Ðí¶àÅÆ×ÓµÄÒ£¿ØÆ÷»òÕß TV£¬ËüÃǶ¼Äܹ¤×÷¡£ËüÃǵÄΨһ¹²Í¬µã¾ÍÊÇ¡°TV Ò£¿ØÆ÷¡±µÄ½Ó¿Ú¡£Ö»Òªµ±Ä㰴ϵçÔº¡¢ÒôÁ¿¡¢ÆµµÀ»òÕ߯äËüÈκΰ´Å¥(ÊäÈë)ʱ£¬Ò»¿éµç·ÏòÄãµÄ TV ·¢ËÍÕýÈ·µÄÐźÅ(Êä³ö)£¬Ëü¾Í×ñÑ­¡°TV Ò£¿ØÆ÷¡±½Ó¿Ú¡£

Ä£¿é»¯¸øÓèϵͳÐí¶àºÃ´¦£¬²¢ÇÒÊÇÒ»ÖÖ³Á˼ÊìÂǵÄϵͳÉè¼Æ¡£Ê×ÏÈ£¬Ä£¿é»¯µÄϵͳÒ×ÓÚÀí½â¡£ÕâʹËüÒ×ÓÚÐ޸ĺÍÀ©Õ¹¡£Æä´Î£¬Èç¹ûϵͳÖÐʲôµØ·½·¢Éú´íÎó£¬Ö»ÐèÒª¸ü»»ÓдíÎóµÄ×é¼þ¡£ÔÙÕߣ¬bug »ò¹ÊÕÏ¿ÉÒÔÇáÒ×¶¨Î»¡£Èç¹û×é¼þµÄÊä³ö²»·ûºÏ½Ó¿ÚµÄ¹æ¶¨£¬¶øÇÒÊäÈëÊÇÕýÈ·µÄ£¬ÄÇôÕâ¸ö×é¼þ¾ÍÊǹÊÕÏÀ´Ô´¡£

2.4 ÏûÏ¢´«µÝ

ÔÚ·Ö²¼Ê½ÏµÍ³ÖУ¬×é¼þʹÓÃÏûÏ¢´«µÝÀ´»¥Ï๵ͨ¡£ÏûÏ¢ÓÐÈý¸ö±ØÒª²¿·Ö£º·¢ËÍÕß¡¢½ÓÊÕÕߺÍÄÚÈÝ¡£·¢ËÍÕßÐèÒª±»Ö¸¶¨£¬±ãÓÚ½ÓÊÜÕßµÃÖªÄĸö×é¼þ·¢ËÍÁËÐÅÏ¢£¬ÒÔ¼°½«»Ø¸´·¢Ë͵½ÄÄÀï¡£½ÓÊÕÕßÐèÒª±»Ö¸¶¨£¬±ãÓÚÈκÎЭÖú·¢ËÍÏûÏ¢µÄ¼ÆËã»úÖªµÀ·¢Ë͵½ÄÄÀï¡£ÏûÏ¢µÄÄÚÈÝÊÇ×¹óµÄ¡£È¡¾öÓÚÕû¸öϵͳµÄº¯Êý£¬ÄÚÈÝ¿ÉÒÔÊÇÒ»¶ÎÊý¾Ý¡¢Ò»¸öÐźţ¬»òÕßÒ»ÌõÖ¸ÁÈÃÔ¶³Ì¼ÆËã»úÀ´ÒÔһЩ²ÎÊýÇó³öij¸öº¯Êý¡£

ÏûÏ¢´«µÝµÄ¸ÅÄîºÍµÚ¶þÕµÄÏûÏ¢´«µÝ»úÖÆÓкܴó¹ØÏµ£¬ÆäÖУ¬µ÷¶Èº¯Êý»ò×Öµä»áÏìӦֵΪ×Ö·û´®µÄÐÅÏ¢¡£ÔÚ³ÌÐòÖУ¬·¢ËÍÕߺͽÓÊÜÕß¶¼ÓÉÇóÖµ¹æÔò±êʶ¡£µ«ÊÇÔÚ·Ö²¼Ê½ÏµÍ³ÖУ¬½ÓÊÜÕߺͷ¢ËÍÕß¶¼±ØÐëÏÔʽ±àÂë½øÏûÏ¢ÖС£ÔÚ³ÌÐòÖУ¬Ê¹ÓÃ×Ö·û´®À´¿ØÖƵ÷¶Èº¯ÊýµÄÐÐΪʮ·Ö·½±ã¡£ÔÚ·Ö²¼Ê½ÏµÍ³ÖУ¬ÏûÏ¢ÐèÒª¾­¹ýÍøÂç·¢ËÍ£¬²¢ÇÒ¿ÉÄÜÐèÒª´æ·ÅÐí¶à²»Í¬ÖÖÀàµÄÐźÅ×÷Ϊ¡°Êý¾Ý¡±£¬ËùÒÔËüÃDz¢²»Ê¼ÖÕ±àÂëΪ×Ö·û´®¡£µ«ÊÇÔÚÁ½ÖÖÇé¿öÖУ¬ÏûÏ¢¶¼·þÎñÓÚÏàͬµÄº¯Êý¡£²»Í¬µÄ×é¼þ(µ÷¶Èº¯Êý»ò¼ÆËã»ú)½»»»ÏûÏ¢À´Íê³ÉÒ»¸öÄ¿±ê£¬ËüÐèÒª¶à¸ö×é¼þÄ£¿éµÄЭ×÷¡£

Ôڽϸ߲ãÃæÉÏ£¬ÏûÏ¢ÄÚÈÝ¿ÉÒÔÊǸ´ÔÓµÄÊý¾Ý½á¹¹£¬µ«ÊÇÔڽϵͲãÃæÉÏ£¬ÏûÏ¢Ö»ÊǼòµ¥µÄ 1 ºÍ 0 µÄÁ÷£¬ÔÚÍøÂçÉÏ´«Ê䡣ΪÁ˱äµÃÒ×Óã¬ËùÓÐÍøÂçÉÏ·¢Ë͵ÄÏûÏ¢¶¼ÐèÒª¸ù¾ÝÒ»ÖµÄÏûϢЭÒé¸ñʽ»¯¡£

ÏûϢЭÒéÊÇһϵÁйæÔò£¬ÓÃÓÚ±àÂëºÍ½âÂëÏûÏ¢¡£Ðí¶àÏûϢЭÒ鹿¶¨£¬ÏûÏ¢±ØÐë·ûºÏÌØ¶¨µÄ¸ñʽ£¬ÆäÖÐÌØ¶¨µÄ±ÈÌØ¾ßÓй̶¨µÄº¬Òå¡£¹Ì¶¨µÄ¸ñʽʵÏÖÁ˹̶¨µÄ±àÂëºÍ½âÂë¹æÔòÀ´Éú³ÉºÍ¶ÁÈ¡ÕâÖÖ¸ñʽ¡£·Ö²¼Ê½ÏµÍ³ÖеÄËùÓÐ×é¼þ¶¼±ØÐëÀí½âЭÒéÀ´»¥ÏàͨÐÅ¡£ÕâÑù£¬ËüÃǾÍÖªµÀÏûÏ¢µÄÄĸö²¿·Ö¶ÔÓ¦ÄĸöÐÅÏ¢¡£

ÏûϢЭÒé²¢²»ÊÇÌØ¶¨µÄ³ÌÐò»òÈí¼þ¿â¡£·´Ö®£¬ËüÃÇÊÇ¿ÉÒÔÓÉ´óÁ¿³ÌÐòʹÓõĹæÔò£¬ÉõÖÁÒÔ²»Í¬µÄ±à³ÌÓïÑÔ±àд¡£ËùÒÔ£¬´øÓдóÁ¿²»Í¬Èí¼þϵͳµÄ¼ÆËã»ú¿ÉÒÔ¼ÓÈëÏàͬµÄ·Ö²¼Ê½ÏµÍ³£¬Ö»ÐèÒª×ñÊØ¿ØÖÆÕâ¸öϵͳµÄÏûϢЭÒé¡£

2.5 ÍòÎ¬ÍøÉϵÄÏûÏ¢

HTTP(³¬Îı¾´«ÊäЭÒéµÄËõд)ÊÇÍòÎ¬ÍøËùÖ§³ÖµÄÏûϢЭÒé¡£ËüÖ¸¶¨ÁËÔÚ Web ä¯ÀÀÆ÷ºÍ·þÎñÆ÷Ö®¼ä½»»»µÄÏûÏ¢¸ñʽ¡£ËùÓÐ Web ä¯ÀÀÆ÷¶¼Ê¹Óà HTTP ЭÒéÀ´ÇëÇó·þÎñÆ÷ÉϵÄÒ³Ãæ£¬¶øÇÒËùÓÐ Web ·þÎñÆ÷¶¼Ê¹Óà HTTP ¸ñʽÀ´·¢»ØËüÃǵÄÏìÓ¦¡£

µ±ÄãÔÚ Web ä¯ÀÀÆ÷ÉϼüÈë URL ʱ£¬±ÈÈç http://en.wikipedia.org/wiki/UC_Berkeley £¬Äãʵ¼ÊÉϾ͸æËßÁËÄãµÄ¼ÆËã»ú£¬Ê¹Óà "HTTP" ЭÒ飬´Ó " http://en.wikipedia.org/wiki/UC_Berkeley " µÄ·þÎñÆ÷ÉÏÇëÇó "wiki/UC_Berkeley" Ò³Ãæ¡£ÏûÏ¢µÄ·¢ËÍÕßÊÇÄãµÄ¼ÆËã»ú£¬½ÓÊÜÕßÊÇ en.wikipedia.org£¬ÒÔ¼°ÏûÏ¢ÄÚÈݵĸñʽÊÇ£º

GET /wiki/UC_Berkeley HTTP/1.1

µÚÒ»¸öµ¥´ÊÊÇÇëÇóÀàÐÍ£¬ÏÂÒ»¸öµ¥´ÊÊÇËùÇëÇóµÄ×ÊÔ´£¬Ö®ºóÊÇЭÒéÃû³Æ(HTTP)ºÍ°æ±¾(1.1)¡£(ÇëÇó»¹ÓÐÆäËüÀàÐÍ£¬ÀýÈç PUT¡¢POST ºÍ HEAD£¬Web ä¯ÀÀÆ÷Ò²»áʹÓÃËüÃÇ¡£)

·þÎñÆ÷·¢»ØÁ˻ظ´¡£Õâʱ£¬·¢ËÍÕßÊÇ en.wikipedia.org£¬½ÓÊÜÕßÊÇÄãµÄ¼ÆËã»ú£¬ÏûÏ¢ÄÚÈݵĸñʽÊÇÓÉÊý¾Ý¸úËæµÄЭÒéÍ·£º

HTTP/1.1 200 OK
Date: Mon, 23 May 2011 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2011 23:11:55 GMT
Content-Type: text/html; charset=UTF-8
... web page content ...

µÚÒ»ÐУ¬µ¥´Ê "200 OK" ±íʾûÓз¢Éú´íÎó¡£Ð­ÒéÍ·ÏÂÃæµÄÐÐÌṩÁËÓйطþÎñÆ÷µÄÐÅÏ¢£¬ÈÕÆÚºÍ·¢»ØµÄÄÚÈÝÀàÐÍ¡£Ð­ÒéÍ·ºÍÒ³ÃæµÄʵ¼ÊÄÚÈÝͨ¹ýÒ»¸ö¿ÕÐÐÀ´·Ö¸ô¡£

Èç¹ûÄã¼üÈëÁË´íÎóµÄ Web µØÖ·£¬»òÕßµã»÷ÁËËÀÁ´£¬Äã¿ÉÄܻῴµ½ÀàËÆÓÚÕâ¸ö´íÎóµÄÏûÏ¢£º

404 Error File Not Found

ËüµÄÒâ˼ÊÇ·þÎñÆ÷·¢ËÍ»ØÁËÒ»¸ö HTTP ЭÒéÍ·£¬ÒÔÕâÑùÆðʼ£º

HTTP/1.1 404 Not Found

һϵÁй̶¨µÄÏìÓ¦´úÂëÊÇÏûϢЭÒéµÄÆÕ±éÌØÐÔ¡£Ð­ÒéµÄÉè¼ÆÕßÊÔͼԤÁÏͨ¹ýЭÒé·¢Ë͵ij£ÓÃÏûÏ¢£¬²¢ÇÒ¸³Îª¹Ì¶¨µÄ´úÂëÀ´¼õÉÙ´«ËÍ´óС£¬ÒÔ¼°½¨Á¢Í¨ÓõÄÏûÏ¢ÓïÒå¡£ÔÚ HTTP ЭÒéÖУ¬200 ÏìÓ¦´úÂë±íʾ³É¹¦£¬¶ø 404 ±íʾ×ÊԴûÓÐÕÒµ½µÄ´íÎ󡣯äËü´óÁ¿ ÏìÓ¦´úÂë Ò²´æÔÚÓÚ HTTP 1.1 ±ê×¼ÖС£

HTTP ÊÇÓÃÓÚͨÐŵĹ̶¨¸ñʽ£¬µ«ÊÇËüÔÊÐí´«ÊäÈÎÒâµÄ Web Ò³Ãæ¡£ÆäËü»¥ÁªÍøÉϵÄÀàËÆÐ­ÒéÊÇ XMPP£¬¼´Ê±ÏûÏ¢µÄ³£ÓÃЭÒ飬ÒÔ¼° FTP£¬ÓÃÓÚÔÚ¿Í»§¶ËºÍ·þÎñÆ÷Ö®¼äÏÂÔØºÍÉÏ´«ÎļþµÄЭÒé¡£

3 ²¢ÐмÆËã

¼ÆËã»úÿһÄê¶¼»á±äµÃÔ½À´Ô½¿ì¡£ÔÚ 1965 Äê£¬Ó¢ÌØ¶ûÁªºÏ´´Ê¼È˸êµÇ¡¤Ä¦¶ûÔ¤²âÁ˼ÆËã»ú½«ÈçºÎËæÊ±¼ä¶ø±äµÃÔ½À´Ô½¿ì¡£½ö½ö»ùÓÚÎå¸öÊý¾Ýµã£¬ËûÍÆ²â£¬Ò»¸öоƬÖеľ§Ìå¹ÜÊýÁ¿Ã¿Á½Ä꽫·­Ò»±¶¡£½ü50Äêºó£¬ËûµÄÔ¤²âÈÔ¾ªÈ˵Ø×¼È·£¬ÏÖÔÚ³ÆÎªÄ¦¶û¶¨ÂÉ¡£

¾¡¹ÜËÙ¶ÈÔÚ±¬Õ¨Ê½Ôö³¤£¬¼ÆËã»ú»¹ÊÇÎÞ·¨¸úÉÏ¿ÉÓÃÊý¾ÝµÄ¹æÄ£¡£¸ù¾ÝһЩ¹À¼Æ£¬»ùÒò²âÐò¼¼ÊõµÄ½ø²½½«Ê¹¿ÉÓõĻùÒòÐòÁÐÊý¾Ý±È´¦ÀíÆ÷±äµÃ¸ü¿ìµÄËÙ¶È»¹Òª¿ì¡£»»¾ä»°Ëµ£¬¶ÔÓÚÒÅ´«Êý¾Ý£¬¼ÆËã»ú±äµÃÔ½À´Ô½²»ÄÜ´¦ÀíÿÄêÐèÒª´¦ÀíµÄÎÊÌâ¹æÄ££¬¼´Ê¹¼ÆËã»ú±¾Éí±äµÃÔ½À´Ô½¿ì¡£

ΪÁ˹æ±Ü¶Ôµ¥¸ö´¦ÀíÆ÷ËٶȵÄÎïÀíºÍ»úÐµÔ¼Êø£¬ÖÆÔìÉÌÕýÔÚתÏòÁíÒ»ÖÖ½â¾ö·½°¸£º¶à´¦ÀíÆ÷¡£Èç¹ûÁ½¸ö£¬»òÈý¸ö£¬»ò¸ü¶àµÄ´¦ÀíÆ÷ÊÇ¿ÉÓõģ¬ÄÇôÐí¶à³ÌÐò¿ÉÒÔ¸ü¿ìµØÖ´ÐС£µ±Ò»¸ö´¦ÀíÆ÷ÔÚ×öһЩ¼ÆËãµÄÒ»¸öÇÐÃæÊ±£¬ÆäËûµÄ¿ÉÒÔÔÚÁíÒ»¸öÇÐÃæ¹¤×÷¡£ËùÓд¦ÀíÆ÷¶¼¿ÉÒÔ¹²ÏíÏàͬµÄÊý¾Ý£¬µ«¹¤×÷²¢ÐÐÖ´ÐС£

ΪÁËÄܹ»ºÏ×÷£¬¶à¸ö´¦ÀíÆ÷ÐèÒªÄܹ»±Ë´Ë¹²ÏíÐÅÏ¢¡£Õâͨ¹ýʹÓù²ÏíÄÚ´æ»·¾³À´Íê³É¡£¸Ã»·¾³ÖеıäÁ¿¡¢¶ÔÏóºÍÊý¾Ý½á¹¹¶ÔËùÓеĽø³Ì¿É¼û¡£´¦ÀíÆ÷ÔÚ¼ÆËãÖеÄ×÷ÓÃÊÇÖ´Ðбà³ÌÓïÑÔµÄÇóÖµºÍÖ´ÐйæÔò¡£ÔÚÒ»¸ö¹²ÏíÄÚ´æÄ£ÐÍÖУ¬²»Í¬µÄ½ø³Ì¿ÉÄÜÖ´Ðв»Í¬µÄÓï¾ä£¬µ«ÈκÎÓï¾ä¶¼»áÓ°Ïì¹²Ïí»·¾³¡£

3.1 ¹²Ïí״̬µÄÎÊÌâ

¶à¸ö½ø³ÌÖ®¼äµÄ¹²Ïí״̬¾ßÓе¥Ò»½ø³Ì»·¾³Ã»ÓеÄÎÊÌâ¡£ÒªÀí½âÆäÔ­Òò£¬ÈÃÎÒÃÇ¿´¿´ÏÂÃæµÄ¼òµ¥¼ÆË㣺

x = 5
x = square(x)
x = x + 1

x µÄÖµÊÇËæÊ±¼ä±ä»¯µÄ¡£Æð³õËüÊÇ 5£¬Ò»¶Îʱ¼äºóËüÊÇ 25£¬×îºóËüÊÇ 26¡£ÔÚµ¥Ò»´¦ÀíÆ÷µÄ»·¾³ÖУ¬Ã»ÓÐʱ¼äÒÀÀµÐÔµÄÎÊÌâ¡£ x µÄÖµÔÚ½áÊøÊ±×ÜÊÇ 26¡£µ«ÊÇÈç¹û´æÔÚ¶à¸ö½ø³Ì£¬¾Í²»ÄÜÕâÑù˵ÁË¡£¼ÙÉèÎÒÃDz¢ÐÐÖ´ÐÐÁËÉÏÃæ´úÂëµÄ×îºóÁ½ÐУºÒ»¸ö´¦ÀíÆ÷Ö´ÐÐ x = square(x) ¶øÁíÒ»¸öÖ´ÐÐ x = x + 1 ¡£Ã¿Ò»¸öÕâЩ¸³ÖµÓï¾ä¶¼°üº¬²éÕÒµ±Ç°°ó¶¨µ½ x µÄÖµ£¬È»ºóʹÓÃÐÂÖµ¸üа󶨡£ÈÃÎÒÃǼÙÉè x Êǹ²ÏíµÄ£¬Í¬Ò»Ê±¼äÖ»ÓÐÒ»¸ö½ø³Ì¶ÁÈ¡»òдÈë¡£¼´Ê¹Èç´Ë£¬¶ÁºÍдµÄ˳Ðò¿ÉÄÜ»áÓÐËù²»Í¬¡£ÀýÈ磬ÏÂÃæµÄÀý×ÓÏÔʾÁËÁ½¸ö½ø³ÌµÄÿ¸ö½ø³ÌµÄһϵÁв½Ö裬 P1 ºÍ P2 ¡£Ã¿Ò»²½¶¼ÊǼòÒªÃèÊöµÄÇóÖµ¹ý³ÌµÄÒ»²¿·Ö£¬ËæÊ±¼ä´ÓÉϵ½ÏÂÖ´ÐУº

ÔÚÕâ¸ö˳ÐòÖУ¬ x µÄ×îÖÕֵΪ 6¡£Èç¹ûÎÒÃDz»Ð­µ÷ÕâÁ½¸ö¹ý³Ì£¬ÎÒÃÇ¿ÉÒԵõ½ÁíÒ»¸ö˳ÐòµÄ²»Í¬½á¹û£º

ÔÚÕâ¸ö˳ÐòÖУ¬ x ½«ÊÇ 25¡£ÊÂʵÉÏ´æÔÚ¶àÖÖ¿ÉÄÜÐÔ£¬ÕâÈ¡¾öÓÚ½ø³ÌÖ´ÐдúÂëÐеÄ˳Ðò¡£ x µÄ×îÖÕÖµ¿ÉÄÜ×îÖÕΪ 5£¬25£¬»òÔ¤ÆÚÖµ 26¡£

Ç°ÃæµÄÀý×ÓÊÇÎÞ¼ÛÖµµÄ¡£ square(x) ºÍ x = x + 1 ÊǼòµ¥¿ìËٵļÆËã¡£ÎÒÃÇÇ¿ÆÈÒ»ÌõÓï¾äÅÜÔÚÁíÒ»ÌõµÄºóÃæ£¬²¢²»»áʧȥ̫¶àµÄʱ¼ä¡£µ«ÊÇʲôÑùµÄÇé¿öÏ£¬²¢Ðл¯ÊDZز»¿ÉÉÙµÄ?ÕâÖÖÇé¿öµÄÒ»¸öÀý×ÓÊÇÒøÐÐÒµ¡£ÔÚÈκθø¶¨µÄʱ¼ä£¬¿ÉÄÜÓгÉǧÉÏÍòµÄÈËÏëÓÃËûÃǵÄÒøÐÐÕË»§½øÐн»Ò×£ºËûÃÇ¿ÉÄÜÏëÔÚÉ̵êË¢¿¨£¬´æÈë֧Ʊ£¬×ªÕÊ£¬»òÖ§¸¶Õ˵¥¡£¼´Ê¹Ò»¸öÕÊ»§ÔÚͬһʱ¼äÒ²¿ÉÄÜÓлîÔ¾µÄ¶à¸ö½»Òס£

ÈÃÎÒÃÇ¿´¿´µÚ¶þÕ嵀 make_withdraw º¯Êý£¬ÏÂÃæÊÇÐ޸ĹýµÄ°æ±¾£¬ÔÚ¸üÐÂÓà¶îÖ®ºó´òÓ¡¶ø²»ÊÇ·µ»ØËü¡£ÎÒÃǸÐÐËȤµÄÊÇÕâ¸öº¯Êý½«ÈçºÎ²¢·¢Ö´ÐС£

>>> def make_withdraw(balance):
def withdraw(amount):
nonlocal balance
if amount > balance:
print('Insufficient funds')
else:
balance = balance - amount
print(balance)
return withdraw

 

ÏÖÔÚÏëÏóһϣ¬ÎÒÃÇÒÔ 10 ÃÀÔª´´½¨Ò»¸öÕÊ»§£¬ÈÃÎÒÃÇÏëÏ룬Èç¹ûÎÒÃÇ´ÓÕÊ»§ÖÐÌáȡ̫¶àµÄÇ®»á·¢Éúʲô¡£Èç¹ûÎÒÃÇ˳ÐòÖ´ÐÐÕâЩ½»Ò×£¬ÎÒÃÇ»áÊÕµ½×ʽð²»×ãµÄÏûÏ¢¡£

>>> w = make_withdraw(10)
>>> w(8)
2
>>> w(7)
'Insufficient funds'

 

µ«ÊÇ£¬ÔÚ²¢ÐÐÖпÉÒÔÓÐÐí¶à²»Í¬µÄ½á¹û¡£ÏÂÃæÕ¹Ê¾ÁËÒ»ÖÖ¿ÉÄÜÐÔ£º

Õâ¸öÌØÊâµÄÀý×Ó¸ø³öÁËÒ»¸ö²»ÕýÈ·½á¹û 3¡£¾ÍºÃÏñ w(8) ½»Ò×´ÓÀ´Ã»Óз¢Éú¹ý¡£ÆäËû¿ÉÄܵĽá¹ûÊÇ 2£¬ºÍ 'Insufficient funds' ¡£Õâ¸öÎÊÌâµÄ¸ùÔ´ÊÇ£ºÈç¹û P2 ÔÚ P1 дÈëֵǰ¶ÁÈ¡Óà¶î£¬ P2 µÄ״̬ÊDz»Ò»ÖµÄ(·´Ö®ÒàÈ»)¡£ P2 Ëù¶ÁÈ¡µÄÓà¶îÖµÊǹýʱµÄ£¬ÒòΪ P1 ´òËã¸Ä±äËü¡£ P2 ²»ÖªµÀ£¬²¢ÇÒ»áÓò»Ò»ÖµÄÖµ¸²¸ÇËü¡£

Õâ¸öÀý×Ó±íÃ÷£¬²¢Ðл¯µÄ´úÂë²»Ïñ°Ñ´úÂëÐзָø¶à¸ö´¦ÀíÆ÷À´Ö´ÐÐÄÇÑùÈÝÒס£±äÁ¿¶ÁдµÄ˳ÐòÏàµ±ÖØÒª¡£

Ò»¸ö±£Ö¤Ö´ÐÐÕýÈ·ÐÔµÄÓÐÎüÒýÁ¦µÄ·½Ê½ÊÇ£¬Á½¸öÐ޸Ĺ²ÏíÊý¾ÝµÄ³ÌÐò²»ÄÜͬʱִÐС£²»ÐÒµÄÊÇ£¬¶ÔÓÚÒøÐÐÒµÕ⽫Òâζ×Å£¬Ò»´ÎÖ»¿ÉÒÔ½øÐÐÒ»¸ö½»Ò×£¬ÒòΪËùÓеĽ»Ò×¶¼Ð޸Ĺ²ÏíÊý¾Ý¡£Ö±¹ÛµØËµ£¬ÎÒÃÇÃ÷°×£¬Èà 2 ¸ö²»Í¬µÄÈËͬʱ½øÐÐÍêÈ«¶ÀÁ¢µÄÕÊ»§½»Ò×Ó¦¸ÃûÓÐÎÊÌâ¡£²»ÖªºÎ¹Ê£¬ÕâÁ½¸ö²Ù×÷²»»¥Ïà¸ÉÈÅ£¬µ«ÔÚͬһÕÊ»§ÉϵÄÏàͬ·½Ê½µÄͬʱ²Ù×÷¾ÍÏ໥¸ÉÈÅ¡£´ËÍ⣬µ±½ø³Ì²»¶ÁÈ¡»òдÈëʱ£¬ÈÃËüÃÇͬʱÔËÐоÍûÓÐÎÊÌâ¡£

3.2 ²¢ÐмÆËãµÄÕýÈ·ÐÔ

²¢ÐмÆËã»·¾³ÖеÄÕýÈ·ÐÔÓÐÁ½¸ö±ê×¼¡£µÚÒ»¸öÊÇ£¬½á¹ûÓ¦¸Ã×ÜÊÇÏàͬ¡£µÚ¶þ¸öÊÇ£¬½á¹ûÓ¦¸ÃºÍ´®ÐÐÖ´ÐеĽá¹ûÒ»Ö¡£

µÚÒ»¸öÌõ¼þ±íÃ÷£¬ÎÒÃDZØÐë±ÜÃâÔÚÇ°ÃæµÄÕ½ÚÖÐËùʾµÄ±ä»¯£¬ÆäÖÐÔÚ²»Í¬µÄ·½Ê½ÏµĽ»²æ¶Áд»á²úÉú²»Í¬µÄ½á¹û¡£Àý×ÓÖУ¬ÎÒÃÇ´Ó 10 ÃÀÔªµÄÕÊ»§È¡³öÁË w(8) ºÍ w(7) ¡£Õâ¸öÌõ¼þ±íÃ÷£¬ÎÒÃDZØÐëʼÖÕ·µ»ØÏàͬµÄ´ð°¸£¬¶ÀÁ¢ÓÚ P1 ºÍ P2 µÄÖ¸ÁîÖ´ÐÐ˳Ðò¡£ÎÞÂÛÈçºÎ£¬ÎÒÃDZØÐëÒÔÕâÑùÒ»ÖÖ·½Ê½À´±àдÎÒÃǵijÌÐò£¬ÎÞÂÛËûÃÇÈçºÎÏ໥½»²æ£¬ËûÃÇÓ¦¸Ã×ÜÊDzúÉúͬÑùµÄ½á¹û¡£

µÚ¶þ¸öÌõ¼þ½ÒʾÁËÐí¶à¿ÉÄܵĽá¹ûÖÐÄĸöÊÇÕýÈ·µÄ¡£Àý×ÓÖУ¬ÎÒÃÇ´Ó 10 ÃÀÔªµÄÕÊ»§È¡³öÁË w(8) ºÍ w(7) £¬Õâ¸öÌõ¼þ±íÃ÷½á¹û±ØÐë×ÜÊÇÓà¶î²»×㣬¶ø²»ÊÇ 2 »òÕß 3¡£

µ±Ò»¸ö½ø³ÌÔÚ³ÌÐòµÄÁÙ½çÇøÓ°ÏìÁíÒ»¸ö½ø³Ìʱ£¬²¢ÐмÆËãÖоͻá³öÏÖÎÊÌâ¡£ÕâЩ¶¼ÊÇÐèÒªÖ´ÐеĴúÂ벿·Ö£¬ËüÃÇ¿´ËÆÊǵ¥Ò»µÄÖ¸Áµ«Êµ¼ÊÉÏÓɽÏСµÄÓï¾ä×é³É¡£Ò»¸ö³ÌÐò»áÒÔһϵÁÐÔ­×ÓÓ²¼þÖ¸ÁîÖ´ÐУ¬ÓÉÓÚ´¦ÀíÆ÷µÄÉè¼Æ£¬ÕâЩÊDz»Äܱ»´ò¶Ï»ò·Ö¸îΪ¸üСµ¥ÔªµÄÖ¸ÁΪÁËÔÚ²¢ÐеÄÇé¿öϱíÏÖÕýÈ·£¬³ÌÐò´úÂëµÄÁÙ½çÇøÐèÒª¾ßÓÐÔ­×ÓÐÔ£¬±£Ö¤ËûÃDz»»á±»ÈÎºÎÆäËû´úÂëÖжϡ£

ΪÁËÇ¿ÖÆ³ÌÐòÁÙ½çÇøÔÚ²¢·¢ÏµÄÔ­×ÓÐÔ£¬ÐèÒªÄܹ»ÔÚÖØÒªµÄʱ¿Ì½«½ø³ÌÐòÁл¯»ò±Ë´Ëͬ²½¡£ÐòÁл¯Òâζ×Åͬһʱ¼äÖ»ÔËÐÐÒ»¸ö½ø³Ì -- Õâһ˲¼ä¾ÍºÃÏñ´®ÐÐÖ´ÐÐÒ»Ñù¡£Í¬²½ÓÐÁ½ÖÖÐÎʽ¡£Ê×ÏÈÊÇ»¥³â£¬½ø³ÌÂÖÁ÷·ÃÎÊÒ»¸ö±äÁ¿¡£Æä´ÎÊÇÌõ¼þͬ²½£¬ÔÚÂú×ãÌõ¼þ(ÀýÈçÆäËû½ø³ÌÍê³ÉÁËËüÃǵÄÈÎÎñ)֮ǰ½ø³ÌÒ»Ö±µÈ´ý£¬Ö®ºó¼ÌÐøÖ´ÐС£ÕâÑù£¬µ±Ò»¸ö³ÌÐò¼´½«½øÈëÁÙ½çÇøÊ±£¬ÆäËû½ø³Ì¿ÉÒÔÒ»Ö±µÈ´ýµ½ËüÍê³É£¬È»ºó°²È«µØÖ´ÐС£

3.3 ±£»¤¹²Ïí״̬£ºËøºÍÐźÅÁ¿

ÔÚ±¾½ÚÖÐÌÖÂÛµÄËùÓÐͬ²½ºÍÐòÁл¯·½·¨¶¼Ê¹ÓÃÏàͬµÄ»ù±¾Ë¼Ïë¡£ËüÃÇÔÚ¹²Ïí״̬Öн«±äÁ¿ÓÃ×÷Ðźţ¬ËùÓйý³Ì¶¼»áÀí½â²¢×ñÊØËü¡£ÕâÊÇÒ»¸öÏàͬµÄÀíÄÔÊÐí·Ö²¼Ê½ÏµÍ³ÖеļÆËã»úЭͬ¹¤×÷ -- ËüÃÇͨ¹ý´«µÝÏûÏ¢Ï໥Эµ÷£¬¸ù¾Ýÿһ¸ö²ÎÓëÕß¶¼Àí½âºÍ×ñÊØµÄÒ»¸öЭÒé¡£

ÕâЩ»úÖÆ²»ÊÇΪÁ˱£»¤¹²Ïí״̬¶ø³öÏÖµÄÎïÀíÕϰ­¡£Ïà·´£¬ËûÃÇÊǽ¨Á¢Ï໥Àí½âµÄ»ù´¡ÉÏ¡£ºÍ³öÏÖÔÚÊ®×Ö·¿ÚµÄ¸÷ÖÖ·½ÏòµÄ³µÁ¾Äܹ»°²È«Í¨ÐÐÒ»Ñù£¬ÊÇͬһÖÖÏ໥Àí½â¡£ÕâÀïûÓÐÎïÀíµÄǽ±Ú×èÖ¹Æû³µÏàײ£¬Ö»ÓÐ×ñÊØ¹æÔò£¬ºìÉ«Òâζ×Å¡°Í£Ö¹¡±£¬ÂÌÉ«Òâζ×Å¡°Í¨ÐС±¡£Í¬Ñù£¬Ã»ÓÐʲô¿ÉÒÔ±£»¤ÕâЩ¹²Ïí±äÁ¿£¬³ý·Çµ±Ò»¸öÌØ¶¨µÄÐźűíÃ÷ÂÖµ½Ä³¸ö½ø³ÌÁË£¬½ø³Ì²Å»á·ÃÎÊËüÃÇ¡£

Ëø¡£Ëø£¬Ò²±»³ÆÎª»¥³âÌå( mutex )£¬Êǹ²Ïí¶ÔÏ󣬳£ÓÃÓÚ·¢Éä¹²Ïí״̬±»¶ÁÈ¡»òÐ޸ĵÄÐźš£²»Í¬µÄ±à³ÌÓïÑÔʵÏÖËøµÄ·½Ê½²»Í¬£¬µ«ÊÇÔÚ Python ÖУ¬Ò»¸ö½ø³Ì¿ÉÒÔµ÷Óà acquire() ·½·¨À´³¢ÊÔ»ñµÃËøµÄ¡°ËùÓÐȨ¡±£¬È»ºóÔÚʹÓÃÍê¹²Ïí±äÁ¿µÄʱºòµ÷Óà release() ÊÍ·ÅËü¡£µ±½ø³Ì»ñµÃÁËÒ»°ÑËø£¬ÈκÎÊÔͼִÐÐ acquire() ²Ù×÷µÄÆäËû½ø³Ì¶¼»á×Ô¶¯µÈ´ýµ½Ëø±»ÊÍ·Å¡£ÕâÑù£¬Í¬Ò»Ê±¼äÖ»ÓÐÒ»¸ö½ø³Ì¿ÉÒÔ»ñµÃÒ»°ÑËø¡£

¶ÔÓÚÒ»°Ñ±£»¤Ò»×éÌØ¶¨µÄ±äÁ¿µÄËø£¬ËùÓеĽø³Ì¶¼ÐèÒª±à³ÌÀ´×ñÑ­Ò»¸ö¹æÔò£ºÒ»¸ö½ø³Ì²»ÓµÓÐÌØ¶¨µÄËø¾Í²»ÄÜ·ÃÎÊÏàÓ¦µÄ±äÁ¿¡£Êµ¼ÊÉÏ£¬ËùÓнø³Ì¶¼ÐèÒªÔÚËøµÄ acquire() ºÍ release() Óï¾äÖ®¼ä¡°°ü×°¡±×Ô¼º¶Ô¹²Ïí±äÁ¿µÄ²Ù×÷¡£

ÎÒÃÇ¿ÉÒÔ°ÑÕâ¸ö¸ÅÄîÓÃÓÚÒøÐÐÓà¶îµÄÀý×ÓÖС£¸ÃʾÀýµÄÁÙ½çÇøÊÇ´ÓÓà¶î¶ÁÈ¡µ½Ð´ÈëµÄÒ»×é²Ù×÷¡£ÎÒÃÇ¿´µ½£¬Èç¹ûÒ»¸öÒÔÉϵĽø³ÌͬʱִÐÐÕâ¸öÇøÓò£¬ÎÊÌâ¾Í»á·¢Éú¡£ÎªÁ˱£»¤ÁÙ½çÇø£¬ÎÒÃÇÐèҪʹÓÃÒ»°ÑËø¡£ÎÒÃǰÑÕâ°ÑËø³ÆÎª balance_lock (ËäÈ»ÎÒÃÇ¿ÉÒÔÃüÃûΪÈκÎÎÒÃÇϲ»¶µÄÃû×Ö)¡£ÎªÁËËø¶¨Êµ¼Ê±£»¤µÄ²¿·Ö£¬ÎÒÃDZØÐëÈ·±£ÊÔͼ½øÈëÕⲿ·Öʱµ÷Óà acquire() »ñÈ¡Ëø£¬ÒÔ¼°Ö®ºóµ÷Óà release() ÊÍ·ÅËø£¬ÕâÑù¿ÉÒÔÂÖµ½±ðÈË¡£

>>> from threading import Lock
>>> def make_withdraw(balance):
balance_lock = Lock()
def withdraw(amount):
nonlocal balance
# try to acquire the lock
balance_lock.acquire()
# once successful, enter the critical section
if amount > balance:
print("Insufficient funds")
else:
balance = balance - amount
print(balance)
# upon exiting the critical section, release the lock
balance_lock.release()

 

Èç¹ûÎÒÃǽ¨Á¢ºÍ֮ǰһÑùµÄÇéÐΣº

w = make_withdraw(10)

ÏÖÔھͿÉÒÔ²¢ÐÐÖ´ÐÐ w(8) ºÍ w(7) ÁË£º

ÎÒÃÇ¿´µ½ÁË£¬Á½¸ö½ø³Ìͬʱ½øÈëÁÙ½çÇøÊÇ¿ÉÄܵġ£Ä³¸ö½ø³ÌʵÀý»ñÈ¡µ½ÁË balance_lock £¬ÁíÒ»¸ö¾ÍµÃµÈ´ý£¬Ö±µ½ÄǸö½ø³ÌÍ˳öÁËÁÙ½çÇø£¬Ëü²ÅÄÜ¿ªÊ¼Ö´ÐС£

ҪעÒâ³ÌÐò²»»á×Ô¼ºÖÕÖ¹£¬³ý·Ç P1 ÊÍ·ÅÁË balance_lock ¡£Èç¹ûËüûÓÐÊÍ·Å balance_lock £¬ P2 ÓÀÔ¶²»¿ÉÄÜ»ñÈ¡Ëü£¬¶øÊÇÒ»Ö±»áµÈ´ý¡£Íü¼ÇÊÍ·Å»ñµÃµÄËøÊDz¢Ðбà³ÌÖеÄÒ»¸ö³£¼û´íÎó¡£

ÐźÅÁ¿¡£ÐźÅÁ¿ÊÇÓÃÓÚά³ÖÓÐÏÞ×ÊÔ´·ÃÎʵÄÐźš£ËüÃǺÍËøÀàËÆ£¬³ýÁËËüÃÇ¿ÉÒÔÔÊÐíij¸öÏÞÖÆÏµĶà¸ö·ÃÎÊ¡£Ëü¾ÍÏñµçÌÝÒ»ÑùÖ»Äܹ»ÈÝÄɼ¸¸öÈË¡£Ò»µ©´ïµ½ÁËÏÞÖÆ£¬ÏëҪʹÓÃ×ÊÔ´µÄ½ø³Ì¾Í±ØÐëµÈ´ý¡£ÆäËü½ø³ÌÊÍ·ÅÁËÐźÅÁ¿Ö®ºó£¬Ëü²Å¿ÉÒÔ»ñµÃ¡£

ÀýÈ磬¼ÙÉèÓÐÐí¶à½ø³ÌÐèÒª¶ÁÈ¡ÖÐÐÄÊý¾Ý¿â·þÎñÆ÷µÄÊý¾Ý¡£Èç¹û¹ý¶àµÄ½ø³Ìͬʱ·ÃÎÊËü£¬Ëü¾Í»á±ÀÀ££¬ËùÒÔÏÞÖÆÁ¬½ÓÊýÁ¿¾ÍÊǸöºÃÖ÷Òâ¡£Èç¹ûÊý¾Ý¿âÖ»ÄÜͬʱ֧³Ö N=2 µÄÁ¬½Ó£¬ÎÒÃǾͿÉÒÔÒÔ³õʼֵ N=2 À´´´½¨ÐźÅÁ¿¡£

>>> from threading import Semaphore
>>> db_semaphore = Semaphore(2) # set up the semaphore
>>> database = []
>>> def insert(data):
db_semaphore.acquire() # try to acquire the semaphore
database.append(data) # if successful, proceed
db_semaphore.release() # release the semaphore
>>> insert(7)
>>> insert(8)
>>> insert(9)

 

ÐźÅÁ¿µÄ¹¤×÷»úÖÆÊÇ£¬ËùÓнø³ÌÖ»ÔÚ»ñÈ¡ÁËÐźÅÁ¿Ö®ºó²Å¿ÉÒÔ·ÃÎÊÊý¾Ý¿â¡£Ö»ÓÐ N=2 ¸ö½ø³Ì¿ÉÒÔ»ñÈ¡ÐźÅÁ¿£¬ÆäËüµÄ½ø³Ì¶¼ÐèÒªµÈµ½ÆäÖÐÒ»¸ö½ø³ÌÊÍ·ÅÁËÐźÅÁ¿£¬Ö®ºóÔÚ·ÃÎÊÊý¾Ý¿â֮ǰ³¢ÊÔ»ñÈ¡Ëü¡£

ֵΪ 1 µÄÐźÅÁ¿µÄÐÐΪºÍËøÒ»Ñù¡£

3.4 ±£³Öͬ²½£ºÌõ¼þ±äÁ¿

Ìõ¼þ±äÁ¿ÔÚ²¢ÐмÆËãÓÉһϵÁв½Öè×é³Éʱ·Ç³£ÓÐÓ᣽ø³Ì¿ÉÒÔʹÓÃÌõ¼þ±äÁ¿£¬À´ÓÃÐźŸæÖªËüÍê³ÉÁËÌØ¶¨µÄ²½Öè¡£Ö®ºó£¬µÈ´ýÐÅºÅµÄÆäËü½ø³Ì¾Í»á¿ªÊ¼ËüÃǵÄÈÎÎñ¡£Ò»¸öÐèÒªÖð²½¼ÆËãµÄÀý×Ó¾ÍÊÇ´ó¹æÄ£ÏòÁ¿ÐòÁеļÆËã¡£ÔÚ¼ÆËãÉúÎïѧ£¬Web ·¶Î§µÄ¼ÆË㣬ºÍͼÏñ´¦Àí¼°Í¼ÐÎѧÖУ¬³£³£ÐèÒª´¦Àí·Ç³£´óÐÍ(°ÙÍò¼¶ÔªËØ)µÄÏòÁ¿ºÍ¾ØÕó¡£ÏëÏóÏÂÃæµÄ¼ÆË㣺

ÎÒÃÇ¿ÉÒÔͨ¹ý½«¾ØÕóºÍÏòÁ¿°´Ðвð·Ö£¬²¢°ÑÿһÐзÖÅäµ½µ¥¶ÀµÄÏß³ÌÉÏ£¬À´²¢Ðд¦Àíÿһ²½¡£×÷ΪÉÏÃæµÄ¼ÆËãµÄÒ»¸öʵÀý£¬ÏëÏóÏÂÃæµÄ¼òµ¥Öµ£º

 

ÎÒÃǽ«Ç°Ò»°ë(ÕâÀïÊǵÚÒ»ÐÐ)·ÖÅä¸øÒ»¸öỊ̈߳¬ºóÒ»°ë(µÚ¶þÐÐ)·ÖÅ䏸ÁíÒ»¸öỊ̈߳º

ÔÚα´úÂëÖУ¬¼ÆËãÊÇÕâÑùµÄ£º

def do_step_1(index):
A[index] = B[index] + C[index]
def do_step_2(index):
V[index] = M[index] . A

 

½ø³Ì 1 Ö´ÐÐÁË£º

do_step_1(1)
do_step_2(1)

½ø³Ì 2 Ö´ÐÐÁË£º

do_step_1(2)
do_step_2(2)

 

Èç¹ûÔÊÐí²»´øÍ¬²½´¦Àí£¬¾ÍÔì³ÉÏÂÃæµÄ²»Ò»ÖÂÐÔ£º

ÎÊÌâ¾ÍÊÇ V Ö±µ½ËùÓÐÔªËØ¼ÆËã³öÀ´Ê±²Å»á¼ÆËã³öÀ´¡£µ«ÊÇ£¬ P1 ÔÚ A µÄËùÓÐÔªËØ¼ÆËã³öÀ´Ö®Ç°£¬Íê³É A = B+C ²¢ÇÒÒÆµ½ V = MA ¡£ËùÒÔËüÓë M Ïà³ËʱʹÓÃÁË A µÄ²»Ò»ÖµÄÖµ¡£

ÎÒÃÇ¿ÉÒÔʹÓÃÌõ¼þ±äÁ¿À´½â¾öÕâ¸öÎÊÌâ¡£

Ìõ¼þ±äÁ¿ÊDZíÏÖΪÐźŵĶÔÏó£¬Ðźűíʾij¸öÌõ¼þ±»Âú×ã¡£ËüÃÇͨ³£±»ÓÃÓÚЭµ÷½ø³Ì£¬ÕâЩ½ø³ÌÐèÒªÔÚ¼ÌÐøÖ´ÐÐ֮ǰµÈ´ýһЩÊÂÇéµÄ·¢Éú¡£ÐèÒªÂú×ãÒ»¶¨Ìõ¼þµÄ½ø³Ì¿ÉÒԵȴýÒ»¸öÌõ¼þ±äÁ¿£¬Ö±µ½ÆäËü½ø³ÌÐÞ¸ÄÁËÌõ¼þ±äÁ¿À´¸æËßËüÃǼÌÐøÖ´ÐС£

Python ÖУ¬ÈκÎÊýÁ¿µÄ½ø³Ì¶¼¿ÉÒÔʹÓà condition.wait() ·½·¨£¬ÓÃÐźŸæÖªËüÃÇÕýÔڵȴýij¸öÌõ¼þ¡£ÔÚµ÷Óø÷½·¨Ö®ºó£¬ËüÃÇ»á×Ô¶¯µÈ´ýµ½ÆäËü½ø³Ìµ÷ÓÃÁË condition.notify() »ò condition.notifyAll() º¯Êý¡£ notify() ·½·¨Öµ»½ÐÑÒ»¸ö½ø³Ì£¬ÆäËü½ø³ÌÈԾɵȴý¡£ notifyAll() ·½·¨»½ÐÑËùÓеȴýÖеĽø³Ì¡£Ã¿¸ö·½·¨ÔÚ²»Í¬ÇéÐÎÖж¼ºÜʵÓá£

ÓÉÓÚÌõ¼þ±äÁ¿Í¨³£ºÍ¾ö¶¨Ìõ¼þÊÇ·ñÎªÕæµÄ¹²Ïí±äÁ¿ÏàÁªÏµ£¬ËüÃÇÒ²ÌṩÁË acquire() ºÍ release() ·½·¨¡£ÕâЩ·½·¨Ó¦¸ÃÔÚÐ޸ĿÉÄܸıäÌõ¼þ״̬µÄ±äÁ¿Ê±Ê¹Óá£ÈκÎÏëÒªÓÃÐźŸæÖªÌõ¼þÒѾ­¸Ä±äµÄ½ø³Ì£¬±ØÐëÊ×ÏÈʹÓà acquire() À´·ÃÎÊËü¡£

ÔÚÎÒÃǵÄÀý×ÓÖУ¬ÔÚÖ´Ðеڶþ²½Ö®Ç°±ØÐëÂú×ãµÄÌõ¼þÊÇ£¬Á½¸ö½ø³Ì¶¼±ØÐëÍê³ÉÁ˵ÚÒ»²½¡£ÎÒÃÇ¿ÉÒÔ¸ú×ÙÒѾ­Íê³ÉµÚÒ»²½µÄ½ø³ÌÊýÁ¿£¬ÒÔ¼°Ìõ¼þÊÇ·ñ±»Âú×㣬ͨ¹ýÒýÈëÏÂÃæÁ½¸ö±äÁ¿£º

step1_finished = 0
start_step2 = Condition()

 

ÎÒÃÇÔÚ do_step_2 µÄ¿ªÍ·²åÈë start_step_2().wait() ¡£Ã¿¸ö½ø³Ì¶¼»áÔÚÍê³É²½Öè 1 Ö®ºó×ÔÔö step1_finished £¬µ«ÊÇÎÒÃÇÖ»»áÔÚ step_1_finished = 2 ʱ·¢ËÍÐźš£ÏÂÃæµÄα´úÂëչʾÁËËü£º

step1_finished = 0
start_step2 = Condition()
def do_step_1(index):
A[index] = B[index] + C[index]
# access the shared state that determines the condition status
start_step2.acquire()
step1_finished += 1
if(step1_finished == 2): # if the condition is met
start_step2.notifyAll() # send the signal
#release access to shared state
start_step2.release()
def do_step_2(index):
# wait for the condition
start_step2.wait()
V[index] = M[index] . A

 

ÔÚÒýÈëÌõ¼þ±äÁ¿Ö®ºó£¬Á½¸ö½ø³Ì»áÒ»Æð½øÈë²½Öè 2£¬ÏñÏÂÃæÕâÑù£º

ÔÚ½øÈë do_step_2 µÄʱºò£¬ P1 ÐèÒªÔÚ start_step_2 ֮ǰµÈ´ý£¬Ö±µ½ P2 ×ÔÔöÁË step1_finished £¬·¢ÏÖÁËËüµÈÓÚ 2£¬Ö®ºóÏòÌõ¼þ·¢ËÍÐźš£

3.5 ËÀËø

ËäȻͬ²½·½·¨¶Ô±£»¤¹²Ïí״̬ʮ·ÖÓÐЧ£¬µ«ËüÃÇÒ²´øÀ´ÁËÂé·³¡£ÒòΪËüÃǻᵼÖÂÒ»¸ö½ø³ÌµÈ´ýÁíÒ»¸ö½ø³Ì£¬ÕâЩ½ø³Ì¾ÍÓÐ ËÀËø µÄ·çÏÕ¡£ËÀËøÊÇÒ»ÖÖÇéÐΣ¬ÆäÖÐÁ½¸ö»ò¶à¸ö½ø³Ì±»¿¨×¡£¬»¥ÏàµÈ´ý¶Ô·½Íê³É¡£ÎÒÃÇÒѾ­Ìáµ½ÁËÍü¼ÇÊÍ·Åij¸öËøÈçºÎµ¼Ö½ø³ÌÎÞÏÞ¿¨×¡¡£µ«ÊǼ´Ê¹ acquire() ºÍ release() µ÷ÓõÄÊýÁ¿ÕýÈ·£¬³ÌÐòÈÔÈ»»á¹¹³ÉËÀËø¡£

ËÀËøµÄÀ´Ô´ÊÇ Ñ­»·µÈ´ý £¬ÏñÏÂÃæÕ¹Ê¾µÄÕâÑù¡£Ã»Óнø³ÌÄܹ»¼ÌÐøÖ´ÐУ¬ÒòΪËüÃÇÕýÔڵȴýÆäËü½ø³Ì£¬¶øÆäËü½ø³ÌÒ²ÔڵȴýËüÍê³É¡£

×÷Ϊһ¸öÀý×Ó£¬ÎÒÃǻὨÁ¢Á½¸ö½ø³ÌµÄËÀËø¡£¼ÙÉèÓÐÁ½°ÑËø£¬ x_lock ºÍ y_lock £¬²¢ÇÒËüÃÇÏñÕâÑùʹÓãº

>>> x_lock = Lock()
>>> y_lock = Lock()
>>> x = 1
>>> y = 0
>>> def compute():
x_lock.acquire()
y_lock.acquire()
y = x + y
x = x * x
y_lock.release()
x_lock.release()
>>> def anti_compute():
y_lock.acquire()
x_lock.acquire()
y = y - x
x = sqrt(x)
x_lock.release()
y_lock.release()

 

Èç¹û compute() ºÍ anti_compute() ²¢ÐÐÖ´ÐУ¬²¢ÇÒÇ¡ºÃÏñÏÂÃæÕâÑù»¥Ïཻ´í£º

Ëù²úÉúµÄÇéÐξÍÊÇËÀËø¡£ P1 ºÍ P2 ÿ¸ö¶¼³ÖÓÐÒ»°ÑËø£¬µ«ÊÇËüÃÇÐèÒªÁ½°ÑËøÀ´Ö´ÐС£ P1 ÕýÔڵȴý P2 ÊÍ·Å y_lock £¬¶ø P2 ÕýÔڵȴý P1 ÊÍ·Å x_lock ¡£ËùÒÔ£¬Ã»Óнø³ÌÄܹ»¼ÌÐøÖ´ÐС£

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

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ