1Chinese translated version of Documentation/volatile-considered-harmful.txt 2 3If you have any comment or update to the content, please contact the 4original document maintainer directly. However, if you have a problem 5communicating in English you can also ask the Chinese maintainer for 6help. Contact the Chinese maintainer if this translation is outdated 7or if there is a problem with the translation. 8 9Maintainer: Jonathan Corbet <corbet@lwn.net> 10Chinese maintainer: Bryan Wu <bryan.wu@analog.com> 11--------------------------------------------------------------------- 12Documentation/volatile-considered-harmful.txt çä¸æç¿»è¯ 13 14妿æ³è¯è®ºææ´æ°æ¬æçå 容ï¼è¯·ç´æ¥èç³»åææ¡£çç»´æ¤è ãå¦æä½ ä½¿ç¨è±æ 15äº¤æµæå°é¾çè¯ï¼ä¹å¯ä»¥å䏿çç»´æ¤è æ±å©ã妿æ¬ç¿»è¯æ´æ°ä¸åæ¶æè ç¿» 16è¯åå¨é®é¢ï¼è¯·èç³»ä¸æçç»´æ¤è ã 17 18è±æçç»´æ¤è ï¼ Jonathan Corbet <corbet@lwn.net> 19䏿çç»´æ¤è ï¼ ä¼é¹ Bryan Wu <bryan.wu@analog.com> 20䏿çç¿»è¯è ï¼ ä¼é¹ Bryan Wu <bryan.wu@analog.com> 21ä¸æçæ ¡è¯è ï¼ å¼ æ±è¾ Eugene Teo <eugeneteo@kernel.sg> 22 æ¨ç Dave Young <hidave.darkstar@gmail.com> 23以ä¸ä¸ºæ£æ 24--------------------------------------------------------------------- 25 26为ä»ä¹ä¸åºè¯¥ä½¿ç¨âvolatileâç±»å 27------------------------------ 28 29Cç¨åºåé常认为volatile表示æä¸ªåéå¯ä»¥å¨å½åæ§è¡ç线ç¨ä¹å¤è¢«æ¹åï¼å æ¤ï¼å¨å æ ¸ 30ä¸ç¨å°å ±äº«æ°æ®ç»ææ¶ï¼å¸¸å¸¸ä¼æCç¨åºå忬¢ä½¿ç¨volatileè¿ç±»åéãæ¢å¥è¯è¯´ï¼ä»ä»¬ç» 31叏伿volatileç±»åçææç§ç®æçåååéï¼å½ç¶å®ä»¬ä¸æ¯ãå¨å æ ¸ä¸ä½¿ç¨volatileå 32乿»æ¯é误çï¼æ¬ææ¡£å°è§£é为ä»ä¹è¿æ ·ã 33 34çè§£volatileçå ³é®æ¯ç¥éå®çç®çæ¯ç¨æ¥æ¶é¤ä¼åï¼å®é ä¸å¾å°æäººçæ£éè¦è¿æ ·çåº 35ç¨ãå¨å æ ¸ä¸ï¼ç¨åºåå¿ é¡»é²æ¢æå¤çå¹¶å访é®ç ´åå ±äº«çæ°æ®ç»æï¼è¿å ¶å®æ¯ä¸ä¸ªå®å ¨ 36ä¸åçä»»å¡ãç¨æ¥é²æ¢æå¤å¹¶å访é®çä¿æ¤æªæ½ï¼å¯ä»¥æ´å 髿çé¿å 大夿°ä¼åç¸å ³ç 37é®é¢ã 38 39åvolatile䏿 ·ï¼å æ ¸æä¾äºå¾å¤åè¯æ¥ä¿è¯å¹¶åè®¿é®æ¶çæ°æ®å®å ¨ï¼èªæé, äºæ¥é,å 40åå±éççï¼ï¼åæ ·å¯ä»¥é²æ¢æå¤çä¼åã妿å¯ä»¥æ£ç¡®ä½¿ç¨è¿äºå æ ¸åè¯ï¼é£ä¹å°±æ²¡æ 41å¿ è¦å使ç¨volatileã妿ä»ç¶å¿ 须使ç¨volatileï¼é£ä¹å ä¹å¯ä»¥è¯å®å¨ä»£ç çæå¤æä¸ 42个bugã卿£ç¡®è®¾è®¡çå æ ¸ä»£ç ä¸ï¼volatileè½å¸¦æ¥çä» ä» æ¯ä½¿äºæ åæ ¢ã 43 44æèä¸ä¸è¿æ®µå ¸åçå æ ¸ä»£ç ï¼ 45 46 spin_lock(&the_lock); 47 do_something_on(&shared_data); 48 do_something_else_with(&shared_data); 49 spin_unlock(&the_lock); 50 51妿ææç代ç é½éµå¾ªå éè§åï¼å½ææthe_lockçæ¶åï¼ä¸å¯è½æå¤çæ¹åshared_dataç 52å¼ãä»»ä½å¯è½è®¿é®è¯¥æ°æ®çå ¶ä»ä»£ç é½ä¼å¨è¿ä¸ªéä¸çå¾ ãèªæéåè¯è·å åå±é䏿 ·ââ å® 53们æ¾å¼çç¨æ¥ä¹¦åæè¿æ · ââ æå³çæ°æ®è®¿é®ä¸ä¼è·¨è¶å®ä»¬è被ä¼åãæä»¥æ¬æ¥ç¼è¯å¨è®¤ä¸º 54å®ç¥éå¨shared_dataéé¢å°æä»ä¹ï¼ä½æ¯å 为spin_lock()è°ç¨è·å åå±é䏿 ·ï¼ä¼å¼ºå¶ç¼ 55è¯å¨å¿è®°å®æç¥éçä¸åãé£ä¹å¨è®¿é®è¿äºæ°æ®æ¶ä¸ä¼æä¼åçé®é¢ã 56 57妿shared_data被声å为volatileï¼éæä½å°ä»ç¶æ¯å¿ é¡»çãå°±ç®æä»¬ç¥é没æå ¶ä»äººæ£å¨ 58使ç¨å®ï¼ç¼è¯å¨ä¹å°è¢«é»æ¢ä¼å对临çåºå shared_dataç访é®ãå¨éææçåæ¶ï¼ 59shared_data䏿¯volatileçãå¨å¤çå ±äº«æ°æ®çæ¶åï¼éå½çéæä½å¯ä»¥ä¸åéè¦ 60volatile ââ 并䏿¯ææ½å¨å±å®³çã 61 62volatileçåå¨ç±»åæåæ¯ä¸ºé£äºå åæ å°çI/Oå¯åå¨èå®ä¹ãå¨å æ ¸éï¼å¯åå¨è®¿é®ä¹åº 63该被éä¿æ¤ï¼ä½æ¯äººä»¬ä¹ä¸å¸æç¼è¯å¨âä¼åâ临çåºå çå¯åå¨è®¿é®ãå æ ¸éI/Oçå åè®¿é® 64æ¯éè¿è®¿é®å½æ°å®æçï¼ä¸èµæéè¿æé对I/Oå åçç´æ¥è®¿é®ï¼å¹¶ä¸ä¸æ¯å¨ææä½ç³»æ¶æä¸ 65é½è½å·¥ä½ãé£äºè®¿é®å½æ°æ£æ¯ä¸ºäºé²æ¢æå¤ä¼åèåçï¼å æ¤ï¼åè¯´ä¸æ¬¡ï¼volatileç±»åä¸ 66æ¯å¿ éçã 67 68å¦ä¸ç§å¼èµ·ç¨æ·å¯è½ä½¿ç¨volatileçæ åµæ¯å½å¤ç卿£å¿ççå¾ ä¸ä¸ªåéçå¼ãæ£ç¡®æ§è¡ä¸ 69个å¿çå¾ çæ¹æ³æ¯ï¼ 70 71 while (my_variable != what_i_want) 72 cpu_relax(); 73 74cpu_relax()è°ç¨ä¼éä½CPUçè½éæ¶èæè 让ä½äºè¶ 线ç¨åå¤çå¨ï¼å®ä¹ä½ä¸ºå åå±é䏿 ·åº 75ç°ï¼æä»¥ï¼å䏿¬¡ï¼volatile䏿¯å¿ éçãå½ç¶ï¼å¿çå¾ ä¸å¼å§å°±æ¯ä¸ç§å常è§çåæ³ã 76 77å¨å æ ¸ä¸ï¼ä¸äºç¨å°çæ åµä¸volatileä»ç¶æ¯ææä¹çï¼ 78 79 - å¨ä¸äºä½ç³»æ¶æçç³»ç»ä¸ï¼å è®¸ç´æ¥çI/0å å访é®ï¼é£ä¹å颿å°ç访é®å½æ°å¯ä»¥ä½¿ç¨ 80 volatileãåºæ¬ä¸ï¼æ¯ä¸ä¸ªè®¿é®å½æ°è°ç¨å®èªå·±é½æ¯ä¸ä¸ªå°ç临çåºåå¹¶ä¸ä¿è¯äºæç § 81 ç¨åºåææç飿 ·åçè®¿é®æä½ã 82 83 - æäºä¼æ¹åå åçå èæ±ç¼ä»£ç è½ç¶æ²¡æä»ä¹å ¶ä»ææ¾çéä½ç¨ï¼ä½æ¯æè¢«GCCå é¤çå¯ 84 è½æ§ã卿±ç¼å£°æä¸å ä¸volatileå ³é®åå¯ä»¥é²æ¢è¿ç§å 餿ä½ã 85 86 - Jiffieså鿝ä¸ç§ç¹æ®æ åµï¼è½ç¶æ¯æ¬¡å¼ç¨å®çæ¶åé½å¯ä»¥æä¸åçå¼ï¼ä½è¯»jiffies 87 åéæ¶ä¸éè¦ä»»ä½ç¹æ®çå éä¿æ¤ãæä»¥jiffiesåéå¯ä»¥ä½¿ç¨volatileï¼ä½æ¯ä¸èµæ 88 å ¶ä»è·jiffiesç¸åç±»ååé使ç¨volatileãJiffies被认为æ¯ä¸ç§âæè ¢çéçç©" 89 ï¼Linusçè¯ï¼å 为解å³è¿ä¸ªé®é¢æ¯ä¿æç°ç¶è¦éº»ç¦çå¤ã 90 91 - ç±äºæäºI/0设å¤å¯è½ä¼ä¿®æ¹è¿ç»ä¸è´çå å,æä»¥ææ¶,æåè¿ç»ä¸è´å åçæ°æ®ç»æ 92 çæééè¦æ£ç¡®ç使ç¨volatileãç½ç»éé å¨ä½¿ç¨çç¯ç¶ç¼ååºæ£æ¯è¿ç±»æ å½¢çä¸ä¸ªä¾ 93 åï¼å ¶ä¸éé å¨ç¨æ¹åæéæ¥è¡¨ç¤ºåªäºæè¿°ç¬¦å·²ç»å¤çè¿äºã 94 95对äºå¤§å¤ä»£ç ï¼ä¸è¿°å ç§å¯ä»¥ä½¿ç¨volatileçæ åµé½ä¸éç¨ãæä»¥ï¼ä½¿ç¨volatileæ¯ä¸ç§ 96bugå¹¶ä¸éè¦å¯¹è¿æ ·ç代ç é¢å¤ä»ç»æ£æ¥ãé£äºè¯å¾ä½¿ç¨volatileçå¼å人åéè¦é䏿¥æ³æ³ 97ä»ä»¬çæ£æ³å®ç°çæ¯ä»ä¹ã 98 99é常欢è¿å é¤volatileåéçè¡¥ä¸ ï¼ åªè¦è¯æè¿äºè¡¥ä¸å®æ´çèèäºå¹¶åé®é¢ã 100 101注é 102---- 103 104[1] http://lwn.net/Articles/233481/ 105[2] http://lwn.net/Articles/233482/ 106 107è´è°¢ 108---- 109 110æåç±Randy Dunlapæ¨å¨å¹¶ä½åæ¥ç ç©¶ 111ç±Jonathan Corbetæ°å 112åèSatyam Sharmaï¼Johannes Stezenbachï¼Jesper Juhlï¼Heikki Orsilaï¼ 113H. Peter Anvinï¼Philipp HahnåStefan Richterçæè§æ¹åäºæ¬æ¡£ã 114

