#include<pthread.h> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<semaphore.h> #include <unistd.h> #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<THREAD_NUM;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<THREAD_NUM;i++) pthread_join(*(pThreads+i),NULL); free(pThreads); pThreads = NULL; fclose(fp); fp = NULL; return 0; }