Linux ͬ²½·½·¨ÆÊÎö
ÎÄÕÂÀ´Ô´:http://www.ibm.com/developerworks/cn/linux/l-linux-synchronization.html
¼¶±ð£º Öм¶
M. Tim Jones, ¹ËÎʹ¤³Ìʦ, Emulex
2007 Äê 11 ÔÂ 19 ÈÕ
ÔÚѧϰ Linux® µÄ¹ý³ÌÖУ¬ÄúÒ²Ðí½Ó´¥¹ý²¢·¢£¨concurrency£©¡¢ÁÙ½ç¶Î£¨critical section£©ºÍËø¶¨£¬µ«ÊÇÈçºÎÔÚÄÚºËÖÐʹÓÃÕâЩ¸ÅÄîÄØ£¿±¾ÎÄÌÖÂÛÁË 2.6 °æÄÚºËÖпÉÓõÄËø¶¨»úÖÆ£¬°üÀ¨Ô×ÓÔËËã·û£¨atomic operator£©¡¢×ÔÐýËø£¨spinlock£©¡¢¶Á/Ð´Ëø£¨reader/writer lock£©ºÍÄÚºËÐźÅÁ¿£¨kernel semaphore£©¡£ ±¾ÎÄ»¹Ì½ÌÖÁËÿÖÖ»úÖÆ×îÊʺÏÓ¦Óõ½ÄÄЩµØ·½£¬ÒÔ¹¹½¨°²È«¸ßЧµÄÄں˴úÂë¡£
±¾ÎÄÌÖÂÛÁË Linux ÄÚºËÖпÉÓõĴóÁ¿Í¬²½»òËø¶¨»úÖÆ¡£ÕâЩ»úÖÆÎª 2.6.23 °æÄں˵ÄÐí¶à¿ÉÓ÷½·¨ÌṩÁËÓ¦ÓóÌÐò½Ó¿Ú£¨API£©¡£µ«ÊÇÔÚÉîÈëѧϰ API ֮ǰ£¬Ê×ÏÈÐèÒªÃ÷°×½«Òª½â¾öµÄÎÊÌâ¡£
developerWorks ÉÏ Tim µÄ¸ü¶à ÆÊÎö... ϵÁÐ
Linux ÎļþϵͳÆÊÎö
Linux ÍøÂç¶ÑÕ»ÆÊÎö
Linux ÄÚºËÆÊÎö
Linux slab ·ÖÅäÆ÷ÆÊÎö
Tim µÄËùÓÐ Anatomy of... ÎÄÕÂ
²¢·¢ºÍËø¶¨
µ±´æÔÚ²¢·¢ÌØÐÔʱ£¬±ØÐëʹÓÃͬ²½·½·¨¡£µ±ÔÚͬһʱ¼ä¶Î³öÏÖÁ½¸ö»ò¸ü¶à½ø³Ì²¢ÇÒÕâЩ½ø³Ì±Ë´Ë½»»¥£¨ÀýÈ磬¹²ÏíÏàͬµÄ×ÊÔ´£©Ê±£¬¾Í´æÔÚ²¢·¢ ÏÖÏó¡£
ÔÚµ¥´¦ÀíÆ÷£¨uniprocessor£¬UP£©Ö÷»úÉÏ¿ÉÄÜ·¢Éú²¢·¢£¬ÔÚÕâÖÖÖ÷»úÖжà¸öÏ̹߳²Ïíͬһ¸ö CPU ²¢ÇÒÇÀÕ¼£¨preemption£©´´½¨¾ºÌ¬Ìõ¼þ¡£ÇÀÕ¼ ͨ¹ýÁÙʱÖжÏÒ»¸öÏß³ÌÒÔÖ´ÐÐÁíÒ»¸öÏ̵߳ķ½Ê½À´ÊµÏÖ CPU ¹²Ïí¡£¾ºÌ¬Ìõ¼þ ·¢ÉúÔÚÁ½¸ö»ò¸ü¶àÏ̲߳Ù×ÝÒ»¸ö¹²ÏíÊý¾ÝÏîʱ£¬Æä½á¹ûÈ¡¾öÓÚÖ´ÐеÄʱ¼ä¡£ÔÚ¶à´¦ÀíÆ÷£¨MP£©¼ÆËã»úÖÐÒ²´æÔÚ²¢·¢£¬ÆäÖÐÿ¸ö´¦ÀíÆ÷Öй²ÏíÏàͬÊý¾ÝµÄÏß³ÌͬʱִÐС£×¢ÒâÔÚ MP Çé¿öÏ´æÔÚÕæÕýµÄ²¢ÐУ¨parallelism£©£¬ÒòΪÏß³ÌÊÇͬʱִÐеġ£¶øÔÚ UP ÇéÐÎÖУ¬²¢ÐÐÊÇͨ¹ýÇÀÕ¼´´½¨µÄ¡£Á½ÖÖģʽÖÐʵÏÖ²¢·¢¶¼½ÏΪÀ§ÄÑ¡£
Linux ÄÚºËÔÚÁ½ÖÖģʽÖж¼Ö§³Ö²¢·¢¡£Äں˱¾ÉíÊǶ¯Ì¬µÄ£¬¶øÇÒÓÐÐí¶à´´½¨¾ºÌ¬Ìõ¼þµÄ·½·¨¡£Linux ÄÚºËÒ²Ö§³Ö¶à´¦Àí£¨multiprocessing£©£¬³ÆÎª¶Ô³Æ¶à´¦Àí£¨SMP£©¡£¿ÉÒÔÔÚ±¾ÎĺóÃæµÄ ²Î¿¼×ÊÁÏ ²¿·Öѧµ½¸ü¶à¹ØÓÚ SMP µÄ֪ʶ¡£
ÁÙ½ç¶Î¸ÅÄîÊÇΪ½â¾ö¾ºÌ¬Ìõ¼þÎÊÌâ¶ø²úÉúµÄ¡£Ò»¸öÁÙ½ç¶Î ÊÇÒ»¶Î²»ÔÊÐí¶à··ÃÎʵÄÊܱ£»¤µÄ´úÂë¡£Õâ¶Î´úÂë¿ÉÒÔ²Ù×ݹ²ÏíÊý¾Ý»ò¹²Ïí·þÎñ£¨ÀýÈçÓ²¼þÍâΧÉ豸£©¡£ÁÙ½ç¶Î²Ù×÷ʱ¼á³Ö»¥³âËø£¨mutual exclusion£©ÔÔò£¨µ±Ò»¸öÏ̴߳¦ÓÚÁÙ½ç¶ÎÖÐʱ£¬ÆäËûËùÓÐÏ̶߳¼²»ÄܽøÈëÁÙ½ç¶Î£©¡£
ÁÙ½ç¶ÎÖÐÐèÒª½â¾öµÄÒ»¸öÎÊÌâÊÇËÀËøÌõ¼þ¡£¿¼ÂÇÁ½¸ö¶ÀÁ¢µÄÁÙ½ç¶Î£¬¸÷×Ô±£»¤²»Í¬µÄ×ÊÔ´¡£Ã¿¸ö×Ê
Ïà¹ØÎĵµ£º
<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->
½üÆÚÒÔÀ´£¬¾²¹ÛÊÀ½ç
Linux
Òµ½çµÄ¸÷ÖÖ¶¯Ïò£¬ÁîÈËÐÄÈç³±Ó¿£¬²»µÃ°²Äþ¡£´Ë»°Ôõô½²£¿
Ê®¼¸ÄêÀ´£¬
Linux
ÒѾÐγÉÒ»¹ÉÊÀ½çÐԵķ¢Õ¹³±Á÷£¬ÈκÎÊÆÁ¦Ò²×èµ²²»ÁË¡£Ðí¶àÊÀ½ç¼¶µÄ´ó¹ ......
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
pthread_mutex_t wqy_mutex_pause = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t wqy_cond_pause = PTHREAD_COND_INITIALIZER;
bool wqy_pthread_pause = false;
void wqy_pthread_suspend(void)
{
if ......
1£®ÎļþµÄ´´½¨ºÍ¶Áд
¡¡¡¡µ±ÎÒÃÇÐèÒª´ò¿ªÒ»¸öÎļþ½øÐжÁд²Ù×÷µÄʱºò,ÎÒÃÇ¿ÉÒÔʹÓÃϵͳµ÷Óú¯Êýopen.ʹÓÃÍê³ÉÒÔºóÎÒÃǵ÷ÓÃÁíÍâÒ»¸öcloseº¯Êý½øÐйرղÙ×÷.
¡¡¡¡¡¡¡¡int open(const char *pathname,int flags);
¡¡¡¡¡¡¡¡int open(const char *pathname,int flags,mode_t mode);
¡¡¡¡¡¡¡¡int close(int fd);
......
ÔÚubuntuÏ»ù±¾ÉÏÖ»Òªapt-get ¾Í¿ÉÒÔÁË£¬µ«ÊÇÓÐʱºòÒª³¢Ïʾ͵ÃÈ¥ÁíÍâÏÂÁË£¬Õâʱ¾ÍÒªÁ˽âһЩlinuxϰ²Èí¼þµÄ֪ʶÁË£¬ËùÒÔÔÚÍøÉÏÕÒÁËÕâÆªÎÄÕ£®Õª×Ô£ºCnXHacker.Net
¡¡¡¡ÔÚWindowsϰ²×°Èí¼þʱ£¬Ö»ÐèÓÃÊó±êË«»÷Èí¼þµÄ°²×°³ÌÐò£¬»òÕßÓÃZipµÈ½âѹËõÈí¼þ½âѹËõ¼´¿É°²×°¡£ÔÚLinuxϰ²×°Èí¼þ¶Ô³õѧÕßÀ´Ëµ£¬ÄѶȸßÓÚWindowsÏÂÈí¼ ......