0
我看到不同的行爲,當變量用於獲取返回值時,使用pthread_join定義了gloabal與靜態作用域。我在這裏包含了code_snippet。pthred_exit返回變量靜態與全局作用域
靜態變量
int main()
{
static int r1,r2;
pthread_t t1, t2;
int i1[] = {1,2};
int i2[] = {3,4};
r1 = pthread_create(&t1, NULL, myfn, (void*)i1);
r2 = pthread_create(&t2, NULL, myfn, (void*)i2);
pthread_join(t1, (void *)&r1);
pthread_join(t2, (void *)&r2);
printf("Thread 1 returns: %d\n",r1);
printf("Thread 2 returns: %d\n",r2);
return 0;
}
void *myfn(void *intarray)
{
pthread_t t=pthread_self();
int *g = (int *) intarray;
int i=0;
int d=1;
for (i=g[0];i<=g[1];i++)
d*=i;
fprintf(stderr, "TID=%u %d\n",t, d);
pthread_exit((void *)d);
}
返回值
TID=3425117952 12
TID=3433510656 2
Thread 1 returns: 2
Thread 2 returns: 12
全局變量
int r1,r2;
int main()
{
same as above
}
void *myfn(void *intarray)
{
same as above
}
返回值
TID=3425117952 12
TID=3433510656 2
Thread 1 returns: 0 <<<<< it returns 0
Thread 2 returns: 12
可能有人請解釋爲什麼它的行爲有所不同?