Ï̵߳Äͬ²½, ·¢ÉúÔÚ¶à¸öÏ̹߳²ÏíÏàͬÄÚ´æµÄʱºò, ÕâʱҪ±£Ö¤Ã¿¸öÏß³ÌÔÚÿ¸öʱ¿Ì¿´µ½µÄ¹²ÏíÊý¾ÝÊÇÒ»ÖµÄ. Èç¹ûÿ¸öÏß³ÌʹÓõıäÁ¿¶¼ÊÇÆäËûÏ̲߳»»áʹÓõÄ(read & write), »òÕß±äÁ¿ÊÇÖ»¶ÁµÄ, ¾Í²»´æÔÚÒ»ÖÂÐÔÎÊÌâ. µ«ÊÇ, Èç¹ûÁ½¸ö»òÁ½¸öÒÔÉϵÄÏ߳̿ÉÒÔread/writeÒ»¸ö±äÁ¿Ê±, ¾ÍÐèÒª¶ÔÏ߳̽øÐÐͬ²½, ÒÔÈ·±£ËüÃÇÔÚ·ÃÎʸñäÁ¿Ê±, ²»»áµÃµ½ÎÞЧµÄÖµ, ͬʱҲ¿ÉÒÔΨһµØÐ޸ĸñäÁ¿²¢Ê¹ËüÉúЧ.
ÒÔÉϾÍÊÇÎÒÃÇËù˵µÄÏß³Ìͬ²½.
Ïß³Ìͬ²½ÓÐÈýÖÖ³£ÓõĻúÖÆ: »¥³âÁ¿(mutex), ¶ÁÐ´Ëø(rwlock)ºÍÌõ¼þ±äÁ¿(cond).
»¥³âÁ¿ÓÐÁ½ÖÖ״̬: lockºÍunlock, ËüÈ·±£Í¬Ò»Ê±¼äÖ»ÓÐÒ»¸öÏ̷߳ÃÎÊÊý¾Ý;
¶ÁÐ´ËøÓÐÈýÖÖ״̬: ¶Á¼ÓËø, д¼ÓËø, ²»¼ÓËø, Ö»ÓÐÒ»¸öÏ߳̿ÉÒÔÕ¼ÓÐдģʽµÄ¶ÁÐ´Ëø, µ«ÊÇ¿ÉÒÔÓжà¸öÏß³ÌͬʱռÓжÁģʽµÄ¶ÁÐ´Ëø.
Ìõ¼þ±äÁ¿Ôò¸ø¶à¸öÏß³ÌÌṩÁËÒ»¸ö»áºÏµÄ³¡Ëù, Ó뻥³âÁ¿Ò»ÆðʹÓÃʱ, ÔÊÐíÏß³ÌÒÔÎÞ¾ºÕùµÄ·½Ê½µÈ´ýÌØ¶¨Ìõ¼þµÄ·¢Éú.
»¥³âÁ¿
»¥³âÁ¿´Ó±¾ÖÊÉÏ˵¾ÍÊÇÒ»°ÑËø, Ìṩ¶Ô¹²Ïí×ÊÔ´µÄ±£»¤·ÃÎÊ.
1. ³õʼ»¯:
ÔÚLinuxÏÂ, Ï̵߳Ļ¥³âÁ¿Êý¾ÝÀàÐÍÊÇpthread_mutex_t. ÔÚʹÓÃǰ, Òª¶ÔËü½øÐгõʼ»¯:
¶ÔÓÚ¾²Ì¬·ÖÅäµÄ»¥³âÁ¿, ¿ÉÒÔ°ÑËüÉèÖÃΪPTHREAD_MUTEX_INITIALIZER, »òÕßµ÷ÓÃpthread_mutex_init.
¶ÔÓÚ¶¯Ì¬·ÖÅäµÄ»¥³âÁ¿, ÔÚÉêÇëÄÚ´æ(malloc)Ö®ºó, ͨ¹ýpthread_mutex_init½øÐгõʼ»¯, ²¢ÇÒÔÚÊÍ·ÅÄÚ´æ(free)ǰÐèÒªµ÷ÓÃpthread_mutex_destroy.
ÔÐÍ:
int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restric attr);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
Í·Îļþ: <pthread.h>
·µ»ØÖµ: ³É¹¦Ôò·µ»Ø0, ³ö´íÔò·µ»Ø´íÎó±àºÅ.
˵Ã÷: Èç¹ûʹÓÃĬÈϵÄÊôÐÔ³õʼ»¯»¥³âÁ¿, Ö»Ðè°ÑattrÉèΪNULL. ÆäËûÖµÔÚÒÔºó½²½â.
2. »¥³â²Ù×÷:
¶Ô¹²Ïí×ÊÔ´µÄ·ÃÎÊ, Òª¶Ô»¥³âÁ¿½øÐмÓËø, Èç¹û»¥³âÁ¿ÒѾÉÏÁËËø, µ÷ÓÃÏ̻߳á×èÈû, Ö±µ½»¥³âÁ¿±»½âËø. ÔÚÍê³ÉÁ˶Թ²Ïí×ÊÔ´µÄ·ÃÎʺó, Òª¶Ô»¥³âÁ¿½øÐнâËø.
Ê×ÏÈ˵һϼÓËøº¯Êý:
Í·Îļþ: <pthread.h>
ÔÐÍ:
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
·µ»ØÖµ: ³É¹¦Ôò·µ»Ø0, ³ö´íÔò·µ»Ø´íÎó±àºÅ.
˵ Ã÷: ¾ßÌå˵һÏÂtrylockº¯Êý, Õâ¸öº¯ÊýÊÇ·Ç×èÈûµ÷
ÔÚTimesTenµÄÓÅ»¯ÖУ¬Èç¹ûÉæ¼°µ½ Replication »òÕßCache GroupµÄ»°£¬ÄÇôÕë¶Ô TCP/IPÏà¹ØµÄ²ÎÊýµÄÓÅ»¯¶ÔÐÔÄÜÊÇÓÐÒæµÄ¡£ÒòΪËüÃÇÁ©¶¼ÊÇͨ¹ýTCP/IPÐÒé½øÐÐÊý¾Ý½»»¥µÄ¡£ÔÚ°²×°Îĵµ(install.pdf)µÄ39Ò³ÓоßÌåµÄ˵Ã÷£º
For replication, TCP send and receive buffers should be increased to a minimum of 512KB. To ......