我需要解决这个C线程问题

时间:2019-05-19 12:38:34

标签: c linux

我需要读取一个包含整数行的文件data.txt。我需要创建线程并逐行读取。如果一个线程读取了一行,则其他线程应该跳过并且不应该读取它。一行。我尝试了一个代码,但是没有给出任何输出

我在for循环中为行数创建了线程,并将for循环中的当前值作为参数传递给线程函数。

#include<stdio.h>
#include<string.h>
#include<pthread.h>

int main(){    
int a,b,i;
pthread_mutex_t lock;

int getLineCount(){

    FILE *fp;
    char ch;
    int linesCount=0;

    fp=fopen("data.txt","r");
    if(fp==NULL)
    {
        printf("File  does not exist!!!\n");
        return -1;
    }    
    while((ch=fgetc(fp))!=EOF)
    {
        if(ch=='\n')
            linesCount=linesCount+1;
    }
    fclose(fp);
    return linesCount;
}

 void *readLine(void *lineNumb){
    printf("%d",5);
     int lineN= (*(int *)lineNumb);
      pthread_mutex_lock(&lock);

     FILE* fp = fopen("data.txt", "r");
     char line[256];
     int i = 0;

     while (fgets(line, sizeof(line), fp)) {
        i++;
        if(i == lineN)  
        {    
           fscanf(fp,"%d%d",&a,&b);
            printf("%d \n",a+b); 
        }

    }
    fclose(fp);
     pthread_mutex_unlock(&lock);

}


    int lineCount = getLineCount()+1;

    pthread_t tid[lineCount];


    for (i = 1; i <= lineCount; i++) {

    void *b =&i;
        pthread_create(&tid[i], NULL,readLine,(void*)b);     
pthread_mutex_destroy(&lock);
    }
    pthread_join(tid[1] ,NULL);
    pthread_join(tid[2] ,NULL);
    pthread_join(tid[3] ,NULL);
    pthread_join(tid[4] ,NULL);
       pthread_join(tid[5] , NULL);


return 0;
}

0 个答案:

没有答案