c语言读取多个连续的文件,C语言---多个线程读取文件

这是一个C++程序,展示了如何使用pthread库创建多个线程并发读取同一个文件。每个线程通过信号量sem_t进行同步,确保对文件的访问是互斥的。程序创建了THREAD_NUM个线程,每个线程读取文件' test.txt '的内容并打印到标准错误输出。
摘要由CSDN通过智能技术生成

#include

#include

#include

#include

#include

#include 

#define THREAD_NUM 25

typedef struct

{

FILE *_fp;

int _nThreadId;//第几个线程

sem_t *_semLock;

}IDD_THREAD_PARAM;

void *ThreadFunc(void *args)

{

char sLine[100+1];

FILE *fpRead = ((IDD_THREAD_PARAM *)args)->_fp;

sem_t *semLock = ((IDD_THREAD_PARAM *)args)->_semLock;

int nId = ((IDD_THREAD_PARAM *)args)->_nThreadId;

sem_wait(semLock);

while(!feof(fpRead))

{

memset(sLine,0,sizeof(sLine));

fgets(sLine,100,fpRead);

fprintf(stderr,"Thread ID-%d:%s",nId,sLine);

}

sem_post(semLock);

}

int main()

{

pthread_t *pThreads;

sem_t semLock;

pThreads = (pthread_t *)malloc(THREAD_NUM*sizeof(pthread_t));

sem_init(&semLock,0,1);

FILE *fp = fopen("test.txt","r");

//开始线程循环

IDD_THREAD_PARAM param;

for(int i=0;i

{

memset(param,0,sizeof(IDD_THREAD_PARAM));

param._fp = fp;

param._nThreadId = i;

param._semLock = &semLock;

pthread_create((pThreads+i),NULL,ThreadFunc,param);

}

for(int i=0;i

pthread_join(*(pThreads+i),NULL);

free(pThreads);

pThreads = NULL;

fclose(fp);

fp = NULL;

return 0;

}

原文:http://my.oschina.net/u/2276921/blog/531057

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值