Программа завершается на pthread_join - PullRequest
0 голосов
/ 11 апреля 2019

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

...