Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<pthread.h>
  3. #include<semaphore.h>
  4. #ifdef __unix__
  5. # include <unistd.h>
  6. #elif defined _WIN32
  7. # include <windows.h>
  8. #define sleep(x) Sleep(1000 * (x))
  9. #endif
  10. #define buffsize 8
  11. pthread_t mcounter[8];
  12. pthread_t mmonitor ,mcollector;
  13. int counter = 0 , buffpos = 0;
  14. int buffer [buffsize];
  15. sem_t b_empty,b_full,c_empty,c_full;
  16. pthread_mutex_t mutex , buffmux;
  17.  
  18. void *counte(void *x){
  19. while(1){
  20. sleep(2);
  21. printf("Counter Thread : Received message \n ");
  22. printf("Counter Thread : Waiting to Write \n ");
  23. sem_wait(c_empty);
  24. counter++;
  25. printf("Counter Thread : Now adding to counter \n");
  26. sem_post(c_full);
  27. pthread_exit(NULL);
  28. }
  29. }
  30. void *monitor (void * x){
  31. while(1){
  32. sleep(3);
  33. int temp;
  34. printf("Monitor Thread : Waiting to Read Counter \n");
  35. sem_wait(c_full);
  36. temp = counter ;
  37. printf ("Monitor Thread : Reading a Count value of %d \n" , temp );
  38. counter = 0;
  39. sem_post(c_empty);
  40. sem_wait(b_empty);
  41. buffer [buffpos] = temp ;
  42. buffpos ++;
  43. sem_post(b_full);
  44. if(buffpos = 10 ){
  45. printf("Monitor : Buffer is Full ");
  46. }
  47. }
  48. }
  49. void *Collector (void *x){
  50. while(1){
  51. sleep (3);
  52. int val;
  53. sem_wait(b_full);
  54. printf("Collector thread : Reading from buffer at position ");
  55. val = buffer[buffpos] ;
  56. printf(" %d \n",val);
  57. buffpos--;
  58. sem_post(b_empty);
  59. }
  60. }
  61. void initialize (){
  62. sem_init(&b_full,0,0);
  63. sem_init(&b_empty,0,buffsize);
  64. sem_init(&c_full,0,0);
  65. sem_init(&c_empty,0,1);
  66. }
  67.  
  68.  
  69.  
  70. void main (){
  71. initialize();
  72. int i;
  73. for(int i = 0 ; i < 8 ; i++){
  74. pthread_create(&mcounter[i],NULL,counte,NULL);
  75. }
  76. pthread_create(&mmonitor,NULL,monitor,NULL);
  77. pthread_create(&mcollector,NULL,Collector,NULL);
  78. for(int i =0 ; i<8 ;i++){
  79. pthread_join(mcounter[i],NULL);
  80. }
  81. pthread_join(mmonitor,NULL);
  82. pthread_join(mcollector,NULL);
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement