pthread_join не ждет завершения потоков

Я использую pthreads.h на Windows, для простого raytracer. Похоже, что основная функция не ждет окончания потоков. Когда я просто запускаю программу вот так (сейчас я упростил ее, чтобы просто протестировать потоки, но она все равно выдает ошибку):

typedef struct {
    unsigned int id; 
} Thread_Data;

void* render_band(void* arg) {
    Thread_Data* data = (Thread_Data*)arg;
    printf("This is thread number %d", data->id);
    pthread_exit(0);
}

int main() {
    pthread_t threads[NUM_THREADS];
    Thread_Data data[NUM_THREADS];
    for (int i = 0; i < NUM_THREADS; i++) {
        data[i].id = id;

        int rc = pthread_create(&threads[i], NULL, render_band, &data[i]);
        if (rc) {
            printf("[ERROR] From pthread_create: %d\n", rc);
        }
    } 

    for (int i = 0; i < NUM_THREADS; i++) {
        int rc = pthread_join(threads[i], NULL);
        if (rc) {
            printf("[ERROR] From pthread_join: %d\n", rc);
        }
    }
}

Изображение не будет завершено и отображает только пару пикселей. Однако когда я добавляю сон, изображение заканчивается. Приводит меня к мысли, что pthread_join не ждет, хотя в документации так и сказано. Что мне здесь не хватает?

Редактировать: добавлена ​​проверка ошибок, возвращается код ошибки 3 для pthread_join.

1 ответ

Я прошу прощения за тратить время всех. Проблема оказалась в самой библиотеке. Когда я искал pthreads.h в Windows, я нашел некоторую библиотеку в sourceforge. Но, видимо, у MinGW уже была поддержка pthread, и она все испортила. Так что для людей с той же проблемой, просто используйте тот, который поставляется с MinGW.

Другие вопросы по тегам