linuxÄÚºË lock free
//
ͬ²½ÎÊÌ⣺
¶Ô¹²ÏíÊý¾ÝµÄ·ÃÎÊ£¬ÐèҪͬ²½£¬»¥³â¡£
ÔÚÖжϣ¬ÇÀÕ¼£¬¶àCPU£¬¶àÏß³Ì »·¾³ÏÂÓÈÆäÖØÒª¡£
ͬ²½·ÖΪ: ×èÈûͬ²½£¬·Ç×èÈûͬ²½
×èÈûͬ²½ÓÐÐí¶àʵÏÖ·½Ê½ÁË£ºmutex, semaphore. ×èÈûͬ²½Ê¹Óò»µ±¾Í¿ÉÄÜÔì³ÉËÀËø£¬»îËø£¬ÓÅÏȼ¶·´×ª¡£
·Ç×èÈûͬ²½£º£¨ÏÖÔÚÁ÷ÐÐÈýÖÖ£©
wait free ºÜÄÑʵÏÖ£¬Ë¼ÏëÊDZ¾Ïß³ÌÓÐÏÞ²½¾ÍÍê³É£¬ÍêÈ«²»ÓÃÀíÆäÓàÏ̡߳£
lock free È·±£¶à¸öÏß³ÌÖУ¬×ÜÓÐÒ»¸öÏß³ÌÊÇÔËÐÐ×ŵġ£ÔÚÈ«¾ÖÉÏ¿´¾ÍÊÇÕâ¸öÄ£¿éÒ»Ö±ÔËÐÐÖС£
obstruction free Ï̳߳ÖÐøÔËÐУ¬µ±·¢ÏÖ¹²ÏíÊý¾Ý±»¸Ä£¬»Ø¹ö¡£
²»Äѵóö Obstruction-free ÊÇ Non-blocking synchronization ÖÐÐÔÄÜ×î²îµÄ£¬¶ø Wait-free ÐÔÄÜÊÇ×îºÃµÄ£¬µ«ÊµÏÖÄѶÈÒ²ÊÇ×î´óµÄ£¬Òò´Ë Lock-free Ëã·¨¿ªÊ¼±»ÖØÊÓ£¬²¢¹ã·ºÔËÓÃÓÚµ±½ñÕýÔÚÔËÐеijÌÐòÖУ¬±ÈÈç linux Äںˡ£
linuxÄÚºËÖоÍÖ÷ÒªÊÇʵÏÖÁËlock free
Ò»°ã²ÉÓÃÔ×Ó¼¶µÄ read-modify-write ÔÓïÀ´ÊµÏÖ Lock-Free Ëã·¨£¬¸ù¾Ý´ËÀíÂÛ£¬Òµ½çÔÚÔ×Ó²Ù×÷µÄ»ù´¡ÉÏÌá³öÁËÖøÃûµÄ CAS£¨Compare - And - Swap£©²Ù×÷À´ÊµÏÖ Lock-Free Ëã·¨£¬Intel ʵÏÖÁËÒ»ÌõÀàËÆ¸Ã²Ù×÷µÄÖ¸Ácmpxchg8¡£
//ÔÓï
CAS ÔÓ︺Ôð½«Ä³´¦ÄÚ´æµØÖ·µÄÖµ£¨1 ¸ö×Ö½Ú£©ÓëÒ»¸öÆÚÍûÖµ½øÐбȽϣ¬Èç¹ûÏàµÈ£¬Ôò½«¸ÃÄÚ´æµØÖ·´¦µÄÖµÌæ»»ÎªÐÂÖµ£¬CAS ²Ù×÷αÂëÃèÊöÈçÏ£º
Çåµ¥ 1. CAS αÂë
Bool CAS(T* addr, T expected, T newValue)
{
if( *addr == expected )
{
*addr = newValue;
return true;
}
else
return false;
}
ÔÚʵ¼Ê¿ª·¢¹ý³ÌÖУ¬ÀûÓà CAS ½øÐÐͬ²½£¬´úÂëÈçÏÂËùʾ£º
Çåµ¥ 2. CAS ʵ¼Ê²Ù×÷
do{
±¸·Ý¾ÉÊý¾Ý£»
»ùÓÚ¾ÉÊý¾Ý¹¹ÔìÐÂÊý¾Ý£»
}while(!CAS( ÄÚ´æµØÖ·£¬±¸·ÝµÄ¾ÉÊý¾Ý£¬ÐÂÊý¾Ý ))
¾ÍÊÇÖ¸µ±Á½Õß½øÐбȽÏʱ£¬Èç¹ûÏàµÈ£¬ÔòÖ¤Ã÷¹²ÏíÊý¾ÝûÓб»Ð޸ģ¬Ìæ»»³ÉÐÂÖµ£¬È»ºó¼ÌÐøÍùÏÂÔËÐУ»Èç¹û²»ÏàµÈ£¬ËµÃ÷¹²ÏíÊý¾ÝÒѾ±»Ð޸쬷ůúÒѾËù×öµÄ²Ù×÷£¬È»ºóÖØÐÂÖ´ÐиղŵIJÙ×÷¡£ÈÝÒ׿´³ö CAS ²Ù×÷ÊÇ»ùÓÚ¹²ÏíÊý¾Ý²»»á±»Ð޸ĵļÙÉ裬²ÉÓÃÁ
Ïà¹ØÎĵµ£º
³ÉΪһÃû¾«Í¨ Linux ³ÌÐòÉè¼ÆµÄ¸ß¼¶³ÌÐòÔ±Ò»Ö±ÊDz»ÉÙÅóÓÑ×Î×ÎÒÔÇóµÄÄ¿±ê¡£¸ù¾ÝÖлªÓ¢²ÅÍøÍ³¼ÆÊý¾Ý£¬±±¾©µØÇø Linux ³ÌÐòÔ±ÔÂнƽ¾ùΪ Windows ³ÌÐòÔ±µÄ 1.8 ±¶¡¢Java ³ÌÐòÔ±µÄ 2.6 ±¶£¬ Linux ³ÌÐòÔ±ÄêÖÕ½±½ðƽ¾ùΪ Windows ³ÌÐòÔ±µÄ 2.9 ±¶¡£Í¬Ê±Êý¾ÝÏÔʾ£¬Ëæ×ʤ×÷¾ÑéµÄÔö³¤£¬ Linux ³ÌÐòÔ±Óë Windows ³ÌÐòÔ±µÄÊÕÈë²î¾à» ......
Èç¹ûÄã°®ºÃѧϰ֪ʶ£¬ÓÈÆäÊÇLinux²Ù×÷ϵͳ֪ʶ£¬Ëæ×ÅLinuxÓ¦ÓõÄÀ©Õ¹£¬Ðí¶àÅóÓÑ¿ªÊ¼½Ó´¥Linux£¬¿ÉÄã²»ÖªµÀÈ¥ÄÄÀïÕÒµ½ÕâЩ֪ʶ£¬À´ÕâÀÈÃÄã¸ü¼ÓÁ˽âLinuxѧϰ·½·¨¡£ÈÃÄãÈ«ÃæÕÆÎÕLinuxѧϰ·½·¨¡£
1£®Ñ§Ï°µÄÄ¿µÄ
¡¡¡¡Í¨¹ýLinuxµÄÑ§Ï°ÕÆÎÕUNIXµÄÄ¿µÄÏë±Ø²»Óöà˵ÁË£¬ÔÚÕâ¸öÍøÂçÈ˲ÅÉí¼Û±¶ÔöµÄÄê´ú£¬Ïë¿¿¼¼Êõ³Ô·¹ÓÖ²»ÏëÕÆÎÕÍ ......
ѹËõºÍ´ò°üÎļþ
¡¡¡¡* .bz2 — ʹÓÃbzip2ÃüÁîѹËõµÄÎļþ£¬¿ÉÒÔʹÓÃbzip2 -d filename ½â°ü
¡¡¡¡* .gz — ʹÓÃgzipÃüÁîѹËõµÄÎļþ£¬¿ÉÒÔʹÓÃgunzip -d filename ½â°ü
¡¡¡¡* .tar — ʹÓÃtar´ò°üµÄÎļþ£¬¼´tarballÎļþ£¬¿ÉÒÔʹÓÃtar xf filename ½â°ü
¡¡¡¡* .tbz — ʹÓÃtar´òÍê°üºóÔÙÒÔbzip2ÃüÁ ......
×ܽáÕ½ڣºµÚÈý½Ú ×Ö·ûÉ豸Çý¶¯
ÕâÒ»ÕÂÖ÷ÒªÊǽ²Ò»Ð©×Ö·ûÉ豸Çý¶¯³ÌÐòµÄÏà¹ØÖªÊ¶¡£ÔÚ½øÐÐ×Ö·ûÉ豸Çý¶¯³ÌÐòѧϰ֮ǰ£¬ÎÒÃDZØÐëµÃŪÃ÷°×Ò»¸öÎÊÌ⣺Çý¶¯³ÌÐòʱ¸øËÓõġ£
ºÜ¶àÇý¶¯³ÌÐòµÄ³õѧÕߣ¬°´ÕÕÒ»°ã±à³ÌÓïÑÔ£¨C£¬javaµÈµÈ£©±àдӦÓóÌÐòµÄ¾Ñ飬º¯Êý¾ÍÊÇÓÃÀ´µ÷Óõġ£ÕâÖÖµ÷ÓùØÏµ£¬ÔÚÓ¦ÓÿռäÀ´¿´£¬ÏÞÖÆ²»ÊǺÜÃ÷ÏÔ¡£ºÜ¶à ......