linux api±Ê¼Ç£¨6£©£ºỊ̈߳¨ËÄ£© Ïß³Ì˽ÓÐÊý¾Ý
±¾ÎĽ«ÃèÊöÏ̵߳ÄÒ»¸ö±È½ÏÖØÒªµÄÒ»·½Ã棺Ïß³Ì˽ÓÐÊý¾Ý£¬ÈçÏ´úÂ룺
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
pthread_key_t kKey = 0;
void * ThreadProc(void* arg)
{
char* a = (char*)(arg);
sleep(2);
pthread_setspecific(kKey, a);
sleep(1);
char* str = (char*)pthread_getspecific(kKey);
printf("thread: %s\n", str);
}
int main()
{
pthread_t thread_handle1 = 0;
pthread_t thread_handle2 = 0;
char a[] = {"i am A"};
char b[] = {"i am B"};
pthread_create(&thread_handle1, NULL, ThreadProc, a);
pthread_key_create(&kKey, NULL);
pthread_create(&thread_handle2, NULL, ThreadProc, b);
void* out1 = NULL;
void* out2 = NULL;
pthread_join(thread_handle1, &out1);
pthread_join(thread_handle2, &out2);
return 0;
}
ʹÓÃÏß³Ì˽ÓÐÊý¾ÝµÄ²½Ö裺
1£©Ê¹ÓÃpthread_key_create·ÖÅäÒ»¸öÏß³Ì˽ÓÐÊý¾ÝµÄkey£¬ÕâÀïÐèҪעÒâµÄÊǵ±ÎÒÃǵ÷ÓÃÁËÕâ¸öº¯Êý
Ö®ºó½ø³ÌÖÐËùÓеÄÏ̶߳¼¿ÉÒÔʹÓÃÕâ¸ökey£¬²¢ÇÒͨ¹ýÕâ¸ökey»ñÈ¡µ½µÄ˽ÓÐÊý¾ÝÊÇ»¥²»ÏàͬµÄ£¬±ÈÈçÏß³Ì
Aͨ¹ýkeyÉèÖÃÁËÊý¾ÝD£¬µ«Ïß³ÌB²¢Ã»ÓÐÉèÖÃÊý¾Ý£¬ÄÇôAͨ¹ýkey»ñÈ¡µÄÊý¾Ýµ±È»ÊÇD£¬¶øB»ñÈ¡µÄÊÇÒ»¸ö
¿ÕµÄÖµ¡£ÁíÍâÐèҪעÒâµÄÊDz»¹ÜÏß³ÌÊÇÔÚpthread_key_createµ÷ÓÃ֮ǰ»òÖ®ºó²úÉú£¬Ëü¶¼Äܹ»ÔÚº¯Êýµ÷ÓÃ
Ö®ºóʹÓÃÕâ¸ökey¡£
2£©Ê¹ÓÃpthread_setspecificº¯Êý½«keyºÍÒ»¸öÏß³Ì˽ÓÐÊý¾Ý°ó¶¨¡£
3£©Í¨¹ýpthread_getspecificº¯ÊýºÍkey»ñÈ¡µ½Õâ¸öÏ̵߳Ä˽ÓÐÊý¾Ý¡£
ÎÒÒ»Ö±¾õµÃÏß³Ì˽ÓÐÊý¾Ý²ßÂԺܺÃÓ㬵«¿¼Âǵ½Ê¹Óùý³ÌÖÐÐèÒª½øÐГϵͳµ÷ÓÔ£¨pthread_getspecificÊÇϵͳµ÷ÓÃÂ𣿣©£¬
Èç¹û±È½ÏƵ·±µØµ÷ÓÃÕâ¸öº¯ÊýµÄ»°Ëµ²»¶¨»áʹ³ÌÐòµÄÐÔÄÜϽµ£¬µ«¿´ÁËmanÎĵµÖеÄÒ»¾ä»°ºóÕâ¸öÖйËÂÇÉÔ΢¼õÇᣬ¾¡¹Ü»¹ÊÇÓÐÒÉÎÊ£º
“the function to pthread_getspecific() has been designed to favor speed and simplicity over error reporting”
ÉÏÃæËµËüµÄËÙ¶ÈÒѾ±»Éè¼ÆµØºÜ¿ìÁË¡£
Ïà¹ØÎĵµ£º
À뿪Õâ¼Ò¹«Ë¾Ò²ÒѾÎåÄê¶àÁË£¬ÔÙ֮ǰÓÐÒ»¸öÅóÓÑÀ뿪ʱ£¬ÎÒ»¹Ì¸µ½ÐÄÖеÄÓ²¼þÀíÏ룬ËûÖ»ÊÇ˵À뿪Ӳ¼þºÜ¶àÄêÖ®ºó¿ÖÅÂÒѾÎÞ·¨»ØÈ¥ÁË£¬µ±Ê±ÎÒËäȻû˵ʲô£¬ÐÄÀﻹÊÇÓÐЩÎÞÄεġ£½ñÌ쵱дµ½ÏÖÔÚµÄʱºò£¬·¢ÏÖÓ²¼þÔÚÎҵŤ×÷ÖÐÒѾ½¥½¥µ»¯ÁË£¬ÊDz»ÊÇËüÕæµÄ²»ÖØÒªÁË£¿
ÓÚÊÇдϽñÌìµÄ±êÌâµÄʱºò£¬¾ö¶¨¼ÓÉÏGNU/Linux£¬ÒòΪËü³ÉΪÁ ......
±¾ÎÄÖн«½²Êölinux»·¾³±à³ÌÖÐÏ̵߳ÄʹÓᣲ»Ëµ·Ï»°Ö±½ÓÉÏ´úÂ룺
#include <pthread.h>
#include <assert.h>
struct ThreadData
{
int i;
};
void * ThreadProc(void* arg)
{
ThreadData* data = static_cast<ThreadData*>(arg);
//do something
pthread_exit(data);
}
int main() ......
[¾¹ý°²×°²âÊԳɹ¦µÄ·½·¨from CYBEND ]
µÚÒ»²½£ºÏµÍ³ÓëÈí¼þµÄ×¼±¸
ϵͳ°æ±¾ redhat enterprise linux 5 ,Äں˰汾 2.6.18
µÚ¶þ²½£ºÈí¼þ°üµÄ×¼±¸
httpdÈí¼þ°ü£ºhttpd-2.2.8.tar.bz2
mysqlÈí¼þ°ü´Ómysql¹Ù·½ÍøÕ¾ÏÂÔØ£¬ÎÒÑ¡ÓõÄÊÇehel5µÄrpm°ü
MySQL-server-community-5.0.51a-0.rhel5.i386.rpm
MySQL-client-community ......
ÈíʵʱºÍӲʵʱ£¬ÈíʵʱÊÇ˵Υ·´Á˳ÌÐòÖ´ÐеÄdeadlineÒ²²»»áÓÐÖÂÃüµÄ´íÎ󣬶øÓ²ÊµÊ±µÄdeadlineÊÇдËÀµÄ¡£
ºÜ¶àlinuxÓÐӲʵʱµÄ²¹¶¡£¬ÈçMontaVista¡£
ÓÐÔ´¾§ÕñºÍÎÞÔ´¾§Õñ£¬ÓÐÔ´µÄ½Ðosllicator£¬ÎÞÔ´µÄ½Ðcrystal¡£
uclinuxÊǾ²Ì¬±àÒëµÄ£¬Ã»ÓÐmmu»úÖÆ¡£
x86µÄҪѡxterm...
serveu¼ÙÉè·þÎñÆ÷ + linuxÓÃsftp£¨Í¨¹ýssh ......