我在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