C — Ожидание завершения нескольких потоков

Я пытаюсь дождаться завершения всех потоков до завершения процесса main(). Вот что у меня есть до сих пор:

void* mapperFunction()
{
    printf("Hello\n");
    return NULL;
}
int main()
{
    int i; // Used in "for" loops.
    int N = 3; 
    pthread_t* mapperThreads = (pthread_t*) malloc(sizeof(pthread_t) * N);
    for ( i = 0; i < N; i++)
    { // Creates all the mapper threads.
        pthread_create( &mapperThreads[N], NULL, mapperFunction, NULL);
    }
    for ( i = 0; i < N; i++)
    { // Waits for all the mapper threads to terminate.
        pthread_join( mapperThreads[N],NULL);
    }
    return 0;
}

Когда я запускаю этот код, я получаю три разных результата;

1- Привет\n

2- Хелле\nЗдравствуйте\n

3- Привет\nПривет\nПривет\n

Похоже, что процесс main() не всегда ожидает завершения всех потоков. Что я делаю не так?


person Ekin Karayalçın    schedule 07.03.2015    source источник


Ответы (2)


Вы хотите &mapperThreads[i] вместо &mapperThreads[N] в каждом случае.

person psmears    schedule 07.03.2015
comment
Вы правы, это решило проблему. Спасибо за быстрый ответ. - person Ekin Karayalçın; 07.03.2015

Может быть, pthread_barrier_wait это то, что вы ищете?

Ссылка

person nookonee    schedule 07.03.2015