我试图在一个循环中使用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()提早退出,例如。具有无限睡眠循环或输入请求。

10-04 21:15