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.