Рассмотрим следующий раздел функции C :
for (int i = 0; i < n; ++i) {
thread_arg *arg = (thread_arg *) malloc(sizeof(thread_arg));
arg->random_value = random_value;
arg->message = &(message[i * 10]);
if (pthread_create(NULL, NULL, thread_start, (void *) &arg)) {
perror("pthread_create");
exit(EXIT_FAILURE);
}
}
В этом цикле for
я создаю n
потоки, которые выполняют общую процедуру с различными параметрами. Этот цикл for
является частью большой функции, которая возвращает структуру данных, которая изменяется всеми потоками параллельно. Таким образом, важно, чтобы эта большая функция не возвращалась до завершения всех потоков.
Я надеялся найти более простой способ, чем присвоение индивидуального идентификатора всем этим потокам и последующее объединение с pthread_join
.
Есть ли общий подход к тому, чтобы сказать функции что-то вроде «эй, не возвращайте, пока не вернутся все созданные вами потоки»?