程序终止于pthread_join

时间:2019-04-11 12:16:38

标签: c multithreading pthreads pthread-join

我的程序在for循环中创建了一些pthread来完成一些工作,然后使用pthread_join等待它们在另一个for循环中完成,然后应该显示一些输出。问题在于该程序没有通过pthread_join循环,我已经通过调试器逐步执行了该代码,并且似乎在该循环的第二次迭代中该程序只是以退出代码0终止。

for(i = 1; i <= n_cust; i++){
    ids[i]= (int) i;
    int rc = pthread_create(&thread_ids[i], NULL, &thread_transaction, 
(void *) (&ids[i]));

    if (rc != 0) { //no error, all threads are created and print a result
        printf("ERROR: return code from pthread_create() is %d\n", rc);
        exit(-1);
    }
}

for(j=0; j < n_cust; j++) {
    if(thread_ids[j] != null){
        int rc = pthread_join(thread_ids[j], NULL);

        if (rc != 0) {//program terminates before being able to check rc
            printf("ERROR: return code from pthread_join() is %d\n", rc);
            exit(-1);
        }
    }
}

printf("SEAT ARRANGEMENT: \n");

for(y=0; y<Nseat;y++){
    printf("Seat %d / Costumer %d, ", y, seats_array[y]);
}

当我打印pthread_join返回的值时,起初我得到3表示一个线程为空,但是后来我尝试在加入之前检查当前线程是否为空,然后程序以退出代码0停止,在能够打印rc变量之前。线程似乎都在正确地工作,因为所有线程都打印期望的输出。另外,我不知道这是否有帮助,但是为了方便起见,我正在使用Windows pthread库在Windows中构建程序,尽管我应该在linux中进行此操作,或者至少确保它在虚拟机中可以工作。如果您发现有必要,我可以提供在线程中传递的函数的所有代码。预先感谢。

0 个答案:

没有答案