Linux下对信号量测试的一个简单例子


Linux下对信号量测试的一个简单例子:

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <pthread.h>  
  4. #include <semaphore.h>  
  5.  
  6. #define MAXSTACK 100  
  7. int stack[MAXSTACK][2]; 
  8. int size = 0; 
  9. sem_t sem; 
  10.  
  11. void ReadData1(void
  12.     FILE *fp = fopen("1.dat","r"); 
  13.     if(fp == NULL) 
  14.     { 
  15.         printf("Open file error\n"); 
  16.         return
  17.     } 
  18.     while(!feof(fp)) 
  19.     { 
  20.         fscanf(fp,"%d %d",&stack[size][0],&stack[size][1]); 
  21.         sem_post(&sem); 
  22.         ++size; 
  23.     } 
  24.     if(fp != NULL) 
  25.     fclose(fp); 
  26.  
  27. void ReadData2(void
  28.     FILE *fp = fopen("2.dat","r"); 
  29.     if(fp == NULL) 
  30.     { 
  31.         printf("Open file ERROR\n"); 
  32.         return
  33.     } 
  34.     while(!feof(fp)) 
  35.     { 
  36.         fscanf(fp,"%d %d",&stack[size][0],&stack[size][1]); 
  37.         sem_post(&sem); 
  38.         ++size; 
  39.     } 
  40.     if(fp != NULL) 
  41.         fclose(fp); 
  42.  
  43. void HandleData1(void
  44.     while(1) 
  45.     { 
  46.         sem_wait(&sem); 
  47.         printf("Plus:%d+%d=%d\n",stack[size][0],stack[size][1],stack[size][0]+stack[size][1]); 
  48.         --size; 
  49.     } 
  50.  
  51. void HandleData2(void
  52.     while(1) 
  53.     { 
  54.         sem_wait(&sem); 
  55.         printf("Multiply:%d*%d=%d\n",stack[size][0],stack[size][1],stack[size][0]*stack[size][1]); 
  56.         --size; 
  57.     } 
  58.  
  59.  
  60. int main(void
  61.     pthread_t t1,t2,t3,t4; 
  62.     sem_init(&sem,0,0); 
  63.     pthread_create(&t1,NULL,(void *)HandleData1,NULL); 
  64.     pthread_create(&t2,NULL,(void *)HandleData2,NULL); 
  65.     pthread_create(&t3,NULL,(void *)ReadData1,NULL); 
  66.     pthread_create(&t4,NULL,(void *)ReadData2,NULL); 
  67.     pthread_join(t1,NULL); 

相关内容