У меня есть программа на C, которая принимает произвольное количество файлов в качестве аргумента командной строки и вычисляет sha1sum для каждого файла. Я использую pthreads, так что я могу использовать все 4 ядра.c pthreads: запускать не более 4 потоков одновременно в любое время
В настоящее время мой код одновременно запускает все потоки параллельно. Вот отрывок:
c = 0;
for (n = optind; n < argc; n++) {
if (pthread_create(&t[c], NULL, &sha1sum, (void *) argv[n])) {
fprintf(stderr, "Error creating thread\n");
return 1;
}
c++;
}
c = 0;
for (n = optind; n < argc; n++) {
pthread_join(t[c], NULL);
c++;
}
Очевидно, что это не является эффективным (или масштабируемый), чтобы начать все темы сразу.
Что было бы лучшим способом убедиться, что в данный момент работает только 4 потока? Как-то мне нужно запустить 4 потока в начале, а затем «заменить» поток новым, как только он будет завершен.
Как я могу это сделать?