-1

我非常纠结于一个问题,我需要一个线程一个一个的打印文件的行。这是代码:

   #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);
    }

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

4

1 回答 1

2

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

想象一下,你单独派20个人跑到星巴克去喝杯咖啡——根据他们的驾驶和路线选择,他们会以任何顺序到达,不可重复,也不是你发送给他们的顺序。

继续举例,只要派一个人去买二十杯咖啡,你就可以了。

于 2015-12-22T04:22:24.553 回答