Воссоединение темы в C - PullRequest
       4

Воссоединение темы в C

0 голосов
/ 14 февраля 2011

В моей основной функции я порождаю j потоков, которые все вычисляют одну и ту же задачу параллельно, а затем я хочу дождаться их завершения, прежде чем завершить работу.

int main(...) {

    // ...

    int threads = 6;
    pthread_t* thread = malloc(sizeof(pthread_t)*threads);

    for(i = 0; i < threads; i++) {

        struct thread_param *tp;
        tp = malloc(sizeof(*tp));

        // ... 

        int ret = pthread_create(&thread[i], NULL, &control, (void*)tp);

        if(ret != 0) {
            printf ("Create pthread error!\n");
            exit (1);
        }
    }

    for (j = 0; j < threads; j++) {
        printf("JOINING THREAD: %i\n", j);
        pthread_join( &thread[j], NULL);
    }        

    exit(0);
}

Однако ничего не ждет.Main просто выходит, даже не выполняя многопоточные задачи.Я что-то упустил?

1 Ответ

2 голосов
/ 14 февраля 2011

эй, попробуйте pthread_join( thread[j], NULL); я думаю, что проблема с типами. Я проверил документы:

int pthread_join(pthread_t thread, void **value_ptr);

и thread - это p_thread*, а thread[j] - это p_thread, тогда как &thread[j] - это p_thread*, что недопустимо. Возможно, произошла внутренняя ошибка.

Редактировать : Да, я очень уверен в этом, pthread_t в основном int, поэтому pthread_t* принят, это просто недопустимый дескриптор потока, поэтому pthread_join завершается с ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...