У меня есть функция, которая обрабатывает файл. В моем основном методе у меня есть цикл, который создает (# файлов) дочерние потоки и обрабатывает их одновременно. У меня должен быть определенный результат, например, вывод должен быть точно таким же, как вызваны файлы, поэтому, если моя программа вызывается с «файлом file2 file3 file.out», выход должен быть «output file1, output file2, выходной файл3 ".Параллельные потоки и глобальные переменные
Прямо сейчас он выводит файлы в неправильном порядке, очевидно, потому что некоторые потоки заканчиваются первыми.
Вот что мой код выглядит следующим образом:
char *output[10];
void *file_thread(void *arg)
{
//processing the file
// I need to write to output here.
}
int main (int argc, char **argv)
{
int e;
int status;
pthread_t thread[argc - 1];
// For each file
for (e = 1; e < argc; e++)
{
status = pthread_create(&thread[e-1], NULL, file_thread,
(char *)argv[e]);
if (status != 0)
{
err_abort(status, "pthread create");
}
}
for (e=0; e < argc - 1; e++)
{
pthread_join(thread[e], NULL);
}
/*
for(e=0; e < argc - 1; e++)
{
printf("%s", output[e]);
}
*/
return 0;
}
ТАК, что мне нужно сделать, это в основном метод как-то следить за переменные е для каждого потока. Мне запрещено использовать трубы. Я попытался создать другую глобальную переменную x, назначить ее на e на каждой итерации до/после создания потока, но внутри thread_file он всегда выводит x как значение последней итерации.
В принципе, мне нужно, чтобы переменная e хранилась с различным значением в зависимости от номера файла. Затем, в конце основного метода, я могу напечатать его по порядку.
Любая помощь будет высоко оценена. Благодарю.