Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.47 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>
  4. #include <semaphore.h>
  5.  
  6.  
  7. #define P sem_wait
  8. #define V sem_post
  9.  
  10. #define N 10
  11.  
  12. sem_t empty;
  13. sem_t full;
  14.  
  15. int w = 0; // write index
  16. int r = 0; // read index
  17.  
  18. int buffer[N]; // buffer
  19.  
  20. void* read_buffer(void* data)
  21. {
  22.  
  23.  while(1)
  24.     {
  25.    
  26.         P(&full);
  27.  
  28.         printf("--------------- Read ---------------\n");
  29.         printf("Read [%d] : %d\n\n", r, buffer[r]);
  30.      
  31.         buffer[r] = -1;
  32.        
  33.         r = (r + 1) % N;
  34.        
  35.     V(&empty);
  36.  
  37.     sleep(2);
  38.  
  39.     }
  40.     pthread_exit(NULL);
  41.  
  42. }
  43.  
  44.  
  45. void* write_buffer(void* data)
  46. {
  47.     int cpt = 0;
  48.  
  49.     while(1)
  50.     {
  51.  
  52.         P(&empty);
  53.    
  54.         printf("--------------- Write ---------------\n");
  55.         buffer[w] = cpt;
  56.         printf("Write [%d] : %d\n\n", w, cpt);
  57.         w = (w + 1) % N;
  58.        
  59.     V(&full);
  60.         cpt++;
  61.     sleep(2);
  62.  
  63.     }
  64.  
  65.         pthread_exit(NULL);
  66.  
  67. }
  68.  
  69.  
  70. int main()
  71. {
  72.    
  73.     for (int i = 0; i <N ; i++)
  74. {
  75.     buffer[i] = -1 ;
  76.  
  77. }
  78.     pthread_t writer;
  79.     pthread_t reader;
  80.  
  81.     // on initialise les deux sémaphore,
  82.     sem_init(&empty, 0, N);
  83.     sem_init(&full, 0, 0);
  84.  
  85.     // on crée les threads
  86.     pthread_create(&writer, NULL, write_buffer, NULL);
  87.     pthread_create(&reader, NULL, read_buffer, NULL);
  88.  
  89.     // pn attends que les threads se terminent avant de fermer le programme
  90.     pthread_join(writer, NULL);
  91.     pthread_join(reader, NULL);
  92.  
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement