±à¼ÍƼö: |
À´Ô´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 µØÖ·£¬»òÕßµã»÷ÁËËÀÁ´£¬Äã¿ÉÄܻῴµ½ÀàËÆÓÚÕâ¸ö´íÎóµÄÏûÏ¢£º
ËüµÄÒâ˼ÊÇ·þÎñÆ÷·¢ËÍ»ØÁËÒ»¸ö HTTP ÐÒéÍ·£¬ÒÔÕâÑùÆðʼ£º
һϵÁй̶¨µÄÏìÓ¦´úÂëÊÇÏûÏ¢ÐÒéµÄÆÕ±éÌØÐÔ¡£ÐÒéµÄÉè¼ÆÕßÊÔͼԤÁÏͨ¹ýÐÒé·¢Ë͵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(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 ¡£ËùÒÔ£¬Ã»Óнø³ÌÄܹ»¼ÌÐøÖ´ÐС£ |