【发布时间】:2018-04-10 20:29:17
【问题描述】:
我正在开发一个程序,该程序将从文件中读取不同的行并为每个行启动一个线程,在该线程中它将根据行上的内容执行各种操作,但是我不断收到分段错误错误,我我在试图解决它时不知所措。
我试图关注这个问题线程中的所有内容:passing pointer char argument to function in thread
但它仍然无法正常工作。线程函数将是:
void *thread(void *arg)
{
char *buf = arg;
char *tok, *sp;
//extracting transaction type
tok = strtok_r(buf, " ", &sp);
//Branchement selon le type de transaction
switch(tok[0]){
...
}
并且会被这部分调用:
void* readTranslinkedINFO(char* nomFichier){
FILE *f;
char buffer[100];
pthread_t tid;
//Opening file
f = fopen(nomFichier, "rt");
if (f==NULL)
error(2, "readTrans: Erreur lors de l'ouverture du fichier.");
//read first line
fgets(buffer, 100, f);
//start a thread for each line
while(!feof(f)){
pthread_create(&tid, NULL, thread, buffer);
//reading next line
fgets(buffer, 100, f);
}
pthread_join(tid, NULL);
//closing file
fclose(f);
//Return
return NULL;
任何帮助将不胜感激 对不起,如果这里和那里还有一些法语单词 谢谢
【问题讨论】:
-
这里有一个竞争条件:在线程中读取缓冲区时写入缓冲区。
-
你没有存储所有线程 ID,所以 join 不起作用。
-
你为所有线程使用相同的缓冲区:它只是不能工作
-
总结:1)您需要为每个线程分配一个缓冲区以避免缓冲区出现竞争条件。 2)你需要存储线程ID,如果你想在最后加入它们。现在您只加入最后分配的线程。我建议保留一个活动线程计数器而不是加入。
-
您和您的教授/助教都明白这是一个非常低效的练习,是吗?
标签: c multithreading segmentation-fault