Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.58 KB | None | 0 0
  1. #include <iostream>
  2. #include <semaphore.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <thread>
  6.  
  7. using namespace std;
  8.  
  9. sem_t  p[5];      //Array de semaforos
  10.  
  11.  
  12. void filosofo_par(int n_filosofo)
  13. {
  14.     cout<<"\nFilosofo ["<<(n_filosofo+1)<<"] esta pensando"<<endl;/*printf("\nFilosofo [%d] esta pensando",n_filosofo,"\n");*/
  15.     sem_wait(&p[(n_filosofo+1)%5]);
  16.     sem_wait(&p[n_filosofo]);
  17.     cout<<"\nFilosofo ["<<(n_filosofo+1)<<"] esta comiendo"<<endl;/*printf("\nFilosofo [%d] esta comiendo",n_filosofo);*/
  18.     sem_post(&p[n_filosofo]);
  19.     sem_post(&p[(n_filosofo+1)%5]);
  20.     cout<<"\nFilosofo ["<<(n_filosofo+1)<<"] deja de comer"<<endl;
  21. }
  22.  
  23. void filosofo_impar(int n_filosofo)
  24. {
  25.     cout<<"\nFilosofo ["<<(n_filosofo+1)<<"] esta pensando"<<endl;/*printf("\nFilosofo [%d] esta pensando",n_filosofo,"\n");*/
  26.     sem_wait(&p[(n_filosofo+1)%5]);
  27.     sem_wait(&p[n_filosofo]);
  28.     cout<<"\nFilosofo ["<<(n_filosofo+1)<<"] esta comiendo"<<endl;/*printf("\nFilosofo [%d] esta comiendo",n_filosofo);*/
  29.     sem_post(&p[n_filosofo]);
  30.     sem_post(&p[(n_filosofo+1)%5]);
  31. cout<<"\nFilosofo ["<<(n_filosofo+1)<<"] deja de comer"<<endl;
  32. }
  33.  
  34.  
  35. int main()
  36. {
  37.     thread hilo[10];
  38.  
  39.     for(int i=0;i<4;i++)
  40.     {
  41.         sem_init(&p[i],0,1);
  42.     }
  43.  
  44.     for(int i=0;i<5;i++)
  45.     {
  46.          if(i%2 == 0)
  47.          {
  48.             hilo[i] = thread(filosofo_par,i);
  49.          }
  50.          else
  51.         {
  52.             hilo[i] = thread(filosofo_impar,i);
  53.         }
  54.     }
  55.  
  56.      for(int i=0;i<5;i++)
  57.     {
  58.          hilo[i].join();
  59.     }
  60.  
  61.     system("PAUSE");
  62.     return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement