[英]Segmentation fault when trying to create multiple threads for file IO:
我運行以下程序時遇到分段錯誤。 一世
我正在嘗試制作一個執行100次的多線程程序:
我使用信號量在線程之間進行同步。 你知道為什么會這樣嗎?
主要部分:
for(i=0;i<NumberOfThreads;i++) {
if (pthread_create( pid[i], NULL, subthread, NULL ) != 0) {
fprintf(stderr, "pthread_create failed with i = %d. errno = %d, %s\n",i, errno, strerror(errno));
break;
}
}
for(i=0;i<NumberOfThreads;i++) {
pthread_join(*pid[i], NULL);
}
return 0;
}
void *subthread(void) {
int i ;
int temp ;
char ch;
int offset =0 ;
FILE * fd1 ;
FILE * fd2 ;
for(i=0 ;i<100;i++) {
sem_wait(&sem1);
fd1 = fopen (NameOfFile,"r");
fseek (fd1,-2,SEEK_END);
offset=-2;
while((ch=getc(fd1)) !='\n')
{
offset=offset-1;
fseek (fd1,offset,SEEK_END);
}
fscanf(fd1,"%d",&temp);
fclose(fd1);
fd2 = fopen (NameOfFile,"a");
temp=temp+3;
fprintf(fd2,"\n%d",temp);
printf("%d\n",temp);
fclose(fd2);
sem_post(&sem1);
}
pthread_exit(0);
}
這只是代碼的一部分。
當我運行代碼並將1個線程作為輸入時,它會顯示分段錯誤。 對於2個線程,執行是正確的。 對於超過2個線程,它再次顯示分段錯誤
當我嘗試調試時,為了查看導致分段錯誤的原因,日志顯示函數PTHREAD_CREATE
導致它。
對於pthread_create()
,作為第一個參數傳遞的指針必須指向pthread_create()
寫入thre線程id的有效位置。 但正如您在評論中所說, pid
被定義為
pthread_t * pid[NumberOfThreads+1];
這是一個最初未指向有效位置的指針數組。 它們可能為NULL或未確定,具體取決於數組的定義方式。
我建議你把定義改為
pthread_t pid[NumberOfThreads+1];
並調用pthread_create(pid+i,....)
或pthread_create(&pid[i],...);
並使用pid[i]
代替*pid[i]
進行其他pthread_...()
調用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.