我试图在一个循环中使用pthread_create创建30个线程。
struct student_thread{
int id;
char * message;
};
void *student(void *i)
{
struct student_thread *s;
s = (struct student_thread *) i;
printf("%s%d\n",s->message,s->id);
//sleep(1);
pthread_exit(NULL);
}
void creat_student_thread()
{
pthread_t st[N];
struct student_thread stt[N];
int i,ct;
for(i=0;i<N;i++){
stt[i].id =i+1;
stt[i].message = "Created student thread ";
ct = pthread_create(&st[i],NULL,student,(void *) &stt[i].id);
//enqueue(Q1,stt[i].id);
if(ct){
printf("Error!Couldn't creat thread\n");
exit(-1);
}
}
}
int main()
{
creat_student_thread();
}
但是输出仅显示创建了28个线程。output
我在这里想念的是什么?
最佳答案
移动参数数组“ struct student_thread stt [N];”超出“ creat_student_thread()”的范围。比如说使其全球化。
防止main()提早退出,例如。具有无限睡眠循环或输入请求。