【发布时间】:2016-02-22 00:42:02
【问题描述】:
每当我运行我的代码时,我都会经历 4 次迭代,读取文件并创建一个 pthread,直到它出现 ID 11 的段错误。
段错误是由我的打印 ln 引起的: printf("%s %s\n", "用包调用lab_manifes_alignment", *package); 但是为什么这会导致段错误呢?
停下来?
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
pthread_mutex_t mutex;
FILE *packageList;
void *submitPackage(void * packageReq){
char ** package = packageReq;
strcat(packageReq, " | sh lab_manifest_alignment.sh");
printf("%s %s\n", "Calling lab_manifes_alignment with package", *package);
system(packageReq);
return NULL;
}
int main(){
int numThreads;
pthread_t threads[numThreads];
//Init mutex
if(pthread_mutex_init(&mutex, NULL)){
fprintf(stderr, "Error initializing mutex");
}
int rc;
FILE *packageList = fopen("package_list.txt", "r");
if(packageList == NULL){
fprintf(stderr, "ERROR: cannot open file.\n");
return 1;
}
int i = 0;
char line[128];
while ( fgets ( line, sizeof line, packageList ) != NULL ){
/* read a line spawn as many threads as needeed*/
printf("%s %d, %s\n", "line: ",i, line);
rc = pthread_create(&(threads[i]), NULL, submitPackage, line);
if(rc){
printf("ERROR: return code from pthread_create() is %d\n", rc);
exit(EXIT_FAILURE);
}
i++;
}
numThreads = i;
for(i = 0; i < numThreads; i++){
pthread_join(threads[i], NULL);
}
fclose(packageList);
return 0;
}
【问题讨论】:
-
你是不是故意造成并发问题?
-
这有点粗鲁?抱歉我好多年没用过pthread了......如果有这么多明显的问题是什么问题?
-
不,这并不粗鲁。并发是问题之一。正如我之前问过的,这是故意的吗?
-
我没有引入任何故意的问题,我是 C 的业余爱好者
标签: c segmentation-fault pthreads file-read