歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下對信號量測試的一個簡單例子

Linux下對信號量測試的一個簡單例子

日期:2017/3/1 10:08:29   编辑:Linux編程

Linux下對信號量測試的一個簡單例子:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>
  4. #include <semaphore.h>
  5. #define MAXSTACK 100
  6. int stack[MAXSTACK][2];
  7. int size = 0;
  8. sem_t sem;
  9. void ReadData1(void)
  10. {
  11. FILE *fp = fopen("1.dat","r");
  12. if(fp == NULL)
  13. {
  14. printf("Open file error\n");
  15. return;
  16. }
  17. while(!feof(fp))
  18. {
  19. fscanf(fp,"%d %d",&stack[size][0],&stack[size][1]);
  20. sem_post(&sem);
  21. ++size;
  22. }
  23. if(fp != NULL)
  24. fclose(fp);
  25. }
  26. void ReadData2(void)
  27. {
  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. {
  45. while(1)
  46. {
  47. sem_wait(&sem);
  48. printf("Plus:%d+%d=%d\n",stack[size][0],stack[size][1],stack[size][0]+stack[size][1]);
  49. --size;
  50. }
  51. }
  52. void HandleData2(void)
  53. {
  54. while(1)
  55. {
  56. sem_wait(&sem);
  57. printf("Multiply:%d*%d=%d\n",stack[size][0],stack[size][1],stack[size][0]*stack[size][1]);
  58. --size;
  59. }
  60. }
  61. int main(void)
  62. {
  63. pthread_t t1,t2,t3,t4;
  64. sem_init(&sem,0,0);
  65. pthread_create(&t1,NULL,(void *)HandleData1,NULL);
  66. pthread_create(&t2,NULL,(void *)HandleData2,NULL);
  67. pthread_create(&t3,NULL,(void *)ReadData1,NULL);
  68. pthread_create(&t4,NULL,(void *)ReadData2,NULL);
  69. pthread_join(t1,NULL);
  70. }
Copyright © Linux教程網 All Rights Reserved