一行一行的文件单线程C

一行一行的文件单线程C,c,multithreading,file,line-by-line,C,Multithreading,File,Line By Line,我非常陷入一个单一的问题,我需要一个接一个的prinft文件的行,以便与一个线程。代码如下: #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <string.h> /* Prototypes */ pthread_t reader; void *readLine(void *line) {

我非常陷入一个单一的问题,我需要一个接一个的prinft文件的行,以便与一个线程。代码如下:

   #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>
    #include <string.h>
    /* Prototypes */

    pthread_t reader;

    void *readLine(void *line)
    {   
        printf("Thread: %s \n",(char*)line);
        pthread_exit(NULL);
    }

    int main(int argc, char *argv[])
    {
        FILE * fp;
        char * line = NULL;
        size_t len = 0;
        ssize_t read;



        fp = fopen("texto.txt", "r");
        if (fp == NULL)
            exit(EXIT_FAILURE);



        while ((read = getline(&line, &len, fp)) != -1)   {

            if(pthread_create(&reader, NULL, readLine, (void *)line)) {
                    fprintf(stderr, "Error creating thread\n");         
            }

        }


        fclose(fp);
        if  (line)
            free(line);
        exit(EXIT_SUCCESS);
    }
#包括
#包括
#包括
#包括
/*原型*/
pthread_t读取器;
作废*读线(作废*行)
{   
printf(“线程:%s\n”,(char*)行);
pthread_exit(NULL);
}
int main(int argc,char*argv[])
{
文件*fp;
char*line=NULL;
尺寸长度=0;
阅读;
fp=fopen(“texto.txt”,“r”);
如果(fp==NULL)
退出(退出失败);
while((read=getline(&line,&len,fp))!=-1){
if(pthread_create(&reader,NULL,readLine,(void*)行)){
fprintf(stderr,“创建线程时出错\n”);
}
}
fclose(fp);
如果(行)
自由线;
退出(退出成功);
}

此代码无序打印行,并且没有所有线程都打印readLine传递的行,如何通过同一个线程读取器逐行打印?

基本上,通过使用独立线程,您可以独立发送它们,它们可能会相互传递

想象一下,你让20个人独立地跑去星巴克喝咖啡——取决于他们的驾驶和路线选择,他们将以任何顺序到达,不可重复,也不按你给他们发送的顺序


在这个例子中,只要派一个人去买二十杯咖啡,你就会很好。

如果你只需要一行一行地打印,为什么要使用
pthread
?我很确定,如果你产生了一堆线程,并且每个线程的任务都是打印一行,那么一些线程将“无序”地完成执行。如果你不将相同的行缓冲区传递给所有线程,这会有所帮助。想想看——如果你启动线程,然后将下一行读入同一个缓冲区,然后线程调用
printf
?我只是工作的一部分,但主要是将一行一行地传递给另一个线程。除了immibis所说的,如果您希望在多线程环境中以特定顺序发生任何事情,则需要显式同步。现在还不清楚您希望您的程序如何运行。但是序列化输出的一种方法是在
pthread\u create
之后调用
pthread\u join
,等待线程完成其工作。结果是一个非常无用的程序,因为同样的事情可以在没有线程的情况下更有效地完成。但是它将以正确的顺序产生输出。卡鲁姆-:哦,谢谢!我已经将ptrhead_join(但我认为,位置不正确)与pthrad_join放在完美创建工作之后。想象一下,你独立地派20个人去星巴克喝咖啡——取决于他们的驾驶和路线选择,他们将以任何顺序到达,不可重复,也不按你给他们发送的顺序。在这种情况下,你在他们回来之前把车开走。