我在Linux机器上使用C和pthread,并且在并行化程序时遇到了麻烦。线程打开文件的错误
我基本上试图把一个数据文件夹分成几组,每个组由一个线程处理,并在每个数据文件上运行一个函数。
我这样做的方式是我有一个全局char **filename
变量,其中filename [i] =数据文件的文件名。在主函数中,我将使用scandir读入所有数据文件的文件名(减“。”和“..”),并将它们放入文件名变量中。然后创建4个(任意数量)线程,每个线程调用Process函数。在Process()中,每个线程仅打开(使用在Process()中声明的FILE *fin
),并使用start_index和end_index处理部分数据文件。例如,如果有100个文件,则每个线程将处理filename[0]
到filename[24]
,filename[25]
到filename[49]
,filename[50]
到filename[74]
分别filename[75]
到filename[99]
。完成后,所有4个线程的main()
中都有一个pthread_join。
我已检查文件名已正确存储在main()和Process()中。不过,我不断收到分段故障在这里,在工艺():
for (i = start_index; i <= end_index ; i++)
fin = fopen(filename[i], "rb"); <--- Seg fault
我真的不知道为什么因为没有线程试图打开同一文件应该有一个错误。
请指教。
请将代码放在创建文件数组的地方...... – 2010-02-28 03:28:09
您是否尝试过在gdb中运行它并查看段错误时发生了什么? – 2010-02-28 03:29:28
而且,'filename [i]'是什么时候它segfaults? – 2010-02-28 03:30:07