我的程序在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中进行此操作,或者至少确保它在虚拟机中可以工作。如果您发现有必要,我可以提供在线程中传递的函数的所有代码。预先感谢。