C - 线程总是带来分段错误



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

我试图遵循这个问题线程中的所有内容:将指针 char 参数传递给线程中的函数

但它仍然不起作用。线程函数将是:

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. 为什么"while ( !feof (file) )"总是错误的?
  2. 您有数据争用,因为相同的地址buffer传递给所有线程。您可以使用strdup()将每行的副本传递给每个线程,线程函数可以处理释放它。
  3. 您没有保存线程 ID,因此您只与创建的最后一个线程联接。
  4. 始终对所有可能失败的函数(pthread_create、fget 等)进行错误检查。
  5. 只处理一行的线程不会非常有效 - 但我认为这是出于学习/教育目的。否则,这种多线程实现会适得其反。假设您有一个包含一百万行的数据文件。创建一百万个线程既不好又不太可能奏效。

相关内容

  • 没有找到相关文章

最新更新