割り当て用のスレッドを使用してディレクトリ ツリーのサイズを計算する C プログラムを作成しようとしています。
サブディレクトリが 1 つしかない場合はコードが正常に動作しますが、サブディレクトリが 2 つ以上ある場合は常にセグメンテーション フォールト エラーが発生します。私はそれについてたくさん読んでいましたが、コードが失敗する理由を見つけることができませんでした.
私のグローバルスコープでは:
pthread_mutex_t mutex;
int total_size = 0; // Global, to accumulate the size
主要():
int main(int argc, char *argv[])
{
pthread_t thread;
...
if (pthread_mutex_init(&mutex, NULL) < 0)
{
perror("pthread_mutex_init");
exit(1);
}
pthread_create(&thread, NULL, dirsize, (void*)dirpath);
pthread_join(thread, NULL);
printf("\nTotal size: %d\n\n", total_size);
...
}
私のdirsize()関数:
void* dirsize(void* dir)
{
...
pthread_t tid[100];
int threads_created = 0;
dp=opendir(dir);
chdir(dir);
// Loop over files in directory
while ((entry = readdir(dp)) != NULL)
{
...
// Check if directory
if (S_ISDIR(statbuf.st_mode))
{
// Create new thread & call itself recursively
pthread_create(&tid[threads_created], NULL, dirsize, (void*)entry->d_name);
threads_created++;
}
else
{
// Add filesize
pthread_mutex_lock(&mutex);
total_size += statbuf.st_size;
pthread_mutex_unlock(&mutex);
}
}
for (i = 0; i < threads_created; i++)
{
pthread_join(tid[i], NULL);
}
}
ここで何が間違っていますか?正しい方向に向けていただければ幸いです。
ここに私がgdbを通して得ているものがあります: http://pastebin.com/TUkHspHH
前もって感謝します!