下面的多线程程序哪里出了问题,为什么会得到下面的结果?
下面的多线程程序哪里出了问题,为什么会得到下面的结果?
#include "csapp.h"//本头文件可网上下载!
#define N 4
void *thread(void *vargp);
int main()
{
pthread_t tid[N];
int i;
for(i=0;i<N; i++)
Pthread_create(&tid[i], NULL, thread, &i);
for(i=0;i<N; i++)
Pthread_join(tid[i], NULL);
exit(0);
}
/* Thread routine */
void *thread(void *vargp)
{
int myid = *((int *)vargp);
printf("Hello from thread %d\n", myid);
return NULL;
}
输出:
推到赵叔叔
11 years, 4 months ago
Answers
你传进去的是个指针,这个指针指向的i在创建完之后立即就变了,而这时候线程还不一定读取到这个值。所以输出的结果是不确定的。
其实虽然参数类型是void*,但实际上也可以通过强制转换来传递一个int进去的:
#include "csapp.h"//本头文件可网上下载!
#define N 4
void *thread(void *vargp);
int main()
{
pthread_t tid[N];
int i;
for(i=0;i<N; i++)
Pthread_create(&tid[i], NULL, thread, (void*)i); //注意这里
for(i=0;i<N; i++)
Pthread_join(tid[i], NULL);
exit(0);
}
/* Thread routine */
void *thread(void *vargp)
{
int myid = (int)vargp; //还有这里
printf("Hello from thread %d\n", myid);
return NULL;
}
天体D孤云
answered 11 years, 4 months ago