gpt4 book ai didi

c - 线程总是带来段错误

转载 作者:行者123 更新时间:2023-11-30 14:53:47 25 4
gpt4 key购买 nike

我正在开发一个程序,该程序将从文件中读取不同的行,并为每个行启动一个线程,在该线程中它将根据行上的写入内容执行各种操作,但是我不断收到段错误错误,并且我试图解决它时不知所措。

我尝试遵循此问题线程中的所有内容: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;

任何帮助将不胜感激抱歉,如果还有一些法语单词谢谢

最佳答案

  1. Why is “while ( !feof (file) )” always wrong?
  2. 您会遇到数据竞争,因为相同的地址缓冲区被传递给所有线程。您可以使用 strdup() 将每行的副本传递给每个线程,并且线程函数可以处理释放它。
  3. 您没有保存线程 ID,因此您仅加入您创建的最后一个线程。
  4. 始终对所有可能失败的函数(pthread_create、fgets 等)进行错误检查。
  5. 仅处理一行的线程不会非常有效 - 但我认为这是出于学习/教育目的。否则,这种多线程的实现会适得其反。想象一下您有一个包含一百万行的数据文件。创建一百万个线程既糟糕又不太可能起作用。

关于c - 线程总是带来段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47005441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com