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ϵÄÐźŴ¦Àíº¯Êý.
LinuxϵÄÐźŴ¦Àíº¯Êý:
1.ÐźŵIJúÉú
2.ÐźŵĴ¦Àí
3.ÆäËüÐźź¯Êý
--------------------------------------------------------------------------------
Ò»¸öʵÀý
1¡£ÐźŵIJúÉú ......
×ܽáÕ½ڣºµÚÈý½Ú ×Ö·ûÉ豸Çý¶¯
ÕâÒ»ÕÂÖ÷ÒªÊǽ²Ò»Ð©×Ö·ûÉ豸Çý¶¯³ÌÐòµÄÏà¹ØÖªÊ¶¡£ÔÚ½øÐÐ×Ö·ûÉ豸Çý¶¯³ÌÐòѧϰ֮ǰ£¬ÎÒÃDZØÐëµÃŪÃ÷°×Ò»¸öÎÊÌ⣺Çý¶¯³ÌÐòʱ¸øËÓõġ£
ºÜ¶àÇý¶¯³ÌÐòµÄ³õѧÕߣ¬°´ÕÕÒ»°ã±à³ÌÓïÑÔ£¨C£¬javaµÈµÈ£©±àдӦÓóÌÐòµÄ¾Ñ飬º¯Êý¾ÍÊÇÓÃÀ´µ÷Óõġ£ÕâÖÖµ÷ÓùØÏµ£¬ÔÚÓ¦ÓÿռäÀ´¿´£¬ÏÞÖÆ²»ÊǺÜÃ÷ÏÔ¡£ºÜ¶à ......
1. LinusºÍBill
ËÆºõÔÚÒ»Ò¹Ö®¼ä£¬Õâ¸öÃû×ÖͻȻ±äµÃͬÏó±È¶û¡£¸Ç´ÄÒ»ÑùµÄ¶úÊìÄÜÏê¡£µ«ÊDZȶû¡£¸Ç´Ä£¬ÄÄÅÂÉí¼ÛÓÐÊý²»Çå±¶µÄ°ÙÍòÃÀ½ð£¬Ò²ÓÀÔ¶²»»á±ä³ÉLinux Torvalds¡£Õâλ29ËêµÄ·ÒÀ¼ÈË£¬¼òµ¥¶øÇ¿´óµÄLinux²Ù×÷ϵͳµÄ´´ÔìÕߣ¬³¬Ô½Á˸ǴĵÄÉñ»°¡£Ò²Óд«ÎÅ˵¸Ç´ÄÊÇÒ»¸ö׿ԽµÄ³ÌÐòÔ±£¬µ«LinusÊÇ»õÕæ¼ÛʵµÄ¸ßÊ ......
<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->
ÔÚÏÖʵÉú»îÖб»ÈËÃdzÆÎª´óʦ¼¶µÄÈËÎïȷʵºÜÉÙ¼û¡£
Brian
Proffitt
ÏÈÉú¾ÍÊÇһλȫÇòÖªÃû¡¢ÊÜÈË×ð¾´µÄ
Linux
´óʦ¡£´ËÑÔÓкθù¾Ý£¿½üÈÕ£¬ËûÏòÎÒÃÇÍÆ¼öÁËʲô£¿
......
Ò»¸ö³ÌÐòµÄ¿ª·¢Àë²»¿ªÐí¶à¿âº¯ÊýµÄÖ§³Ö£¬¿ÉÊÇ¿âÈç´ËÖ®¶à£¬ÓпªÔ´Ãâ·ÑµÄÒ²ÓÐÊշѵġ£ºÜÏ£ÍûÊìϤ±à³ÌµÄǰ±²°Ñ×Ô¼ºµÄ¾ÑéÕûÀíÏ£¬³£ÓõĿⶼ°üº¬ÄÄЩ¹¦ÄÜ¡£ÏÂÎÄÊÇÔÚÍøÉÏÕÒµÄÒ»¸öÀàËÆµÄ×ÊÁÏ¡£ÆÚ´ý¸ü¶à¸üÈ«µÄÄÚÈÝ¡£
---------------------------------------------------------------------------------------------------
¿´µ ......