Я использую C и pthread на компьютере с Linux, и у меня возникают проблемы с распараллеливанием программы.
В основном я пытаюсь взять в папку файлов данных, разделить их на группы, каждая группа обрабатывается потоком, и запустить функцию для каждого файла данных.
То, как я это делаю, - это глобальная переменная char **filename
, где filename [i] = имя файла данных. В основной функции я буду читать имена файлов всех файлов данных (минус "." И ".."), используя scandir, и помещать их в переменную имени файла. Затем создаются 4 (произвольное число) потока, каждый из которых вызывает функцию Process. В Process () каждый поток только открывается (используя FILE *fin
, объявленный в Process ()) и работает с частью файлов данных, используя start_index и end_index. Например, если имеется 100 файлов, то каждый поток будет обрабатывать filename[0]
до filename[24]
, filename[25]
до filename[49]
, filename[50]
до filename[74]
и filename[75]
до filename[99]
соответственно. После того, как они сделаны, в main()
для всех 4 потоков есть pthread_join.
Я проверил, правильно ли сохранены имена файлов, как в main (), так и в Process (). Тем не менее, я получаю ошибку сегментации здесь, в Process ():
for (i = start_index; i <= end_index ; i++)
fin = fopen(filename[i], "rb"); <--- Seg fault
Я не совсем понимаю, почему должна быть ошибка, поскольку ни один из потоков не пытается открыть один и тот же файл.
Пожалуйста, сообщите.