Моя программа создает несколько циклов pthread в цикле for, которые выполняют некоторую работу, затем ожидает их завершения в другом цикле for, используя pthread_join, и затем предполагается вывод некоторого результата. Проблема в том, что программа не проходит цикл 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 с библиотекой Windows pthread для удобства, хотя я должен делать это в Linux или, по крайней мере, убедиться, что она работает на виртуальной машине. Если вы найдете это необходимым, я могу предоставить весь код функции, который передается в потоке. Заранее спасибо.