pthread10

/* pthread10.c 信号量 */

#include <stdio.h>

#include <pthread.h>  

#include <semaphore.h>  

#define MAXSTACK 100  

int stack[MAXSTACK][2];  

int size=0;  

sem_t sem;  

/* 从文件1.dat读取数据,每读一次,信号量加一*/  

void ReadData1(void){  

 FILE *fp=fopen("1.dat","r");  

 while(fscanf(fp,"%d %d",&stack[size][0],&stack[size][1])!=eof){  

//  fscanf(fp,"%d %d",&stack[size][0],&stack[size][1]);  

  sem_post(&sem);  

  ++size;  

 }  

 fclose(fp);  

}  

/*从文件2.dat读取数据*/  

void ReadData2(void){  

   FILE *fp=fopen("2.dat","r");  

 while(!feof(fp)){  

  fscanf(fp,"%d %d",&stack[size][0],&stack[size][1]);  

  sem_post(&sem);  

  ++size;  

 }  

 fclose(fp);  

}  

/*阻塞等待缓冲区有数据,读取数据后,释放空间,继续等待*/  

void HandleData1(void){  

 while(1){  

  sem_wait(&sem);  

  printf("Plus:%d+%d=%d\n",stack[size][0],stack[size][1],  

  stack[size][0]+stack[size][1]);  

  --size;  

 }  

}  

void HandleData2(void){  

 while(1){  

  sem_wait(&sem);  

  printf("Multiply:%d*%d=%d\n",stack[size][0],stack[size][1],  

  stack[size][0]*stack[size][1]);  

  --size;  

 }  

}  

int main(void){  

 pthread_t t1,t2,t3,t4;  

 sem_init(&sem,0,0);  

 pthread_create(&t1,NULL,(void *)HandleData1,NULL);  

 pthread_create(&t2,NULL,(void *)HandleData2,NULL);  

 pthread_create(&t3,NULL,(void *)ReadData1,NULL);  

 pthread_create(&t4,NULL,(void *)ReadData2,NULL);  

 /* 防止程序过早退出,让它在此无限期等待*/  

 pthread_join(t1,NULL);  

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值