Advertisement
emp3hack

Untitled

Feb 4th, 2016
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.22 KB | None | 0 0
  1. /* Codice usato per problemi di sincronizzazione dove � necessario gestire un problema di priorit�
  2. creando una coda e facendo si che i vip abbiano la precedenza sui clienti nella coda. */
  3.  
  4.  
  5. sem_t coda;
  6. pthread_mutex_t m_vip_in_coda;
  7. int vip_in_coda = 0;
  8.  
  9.  
  10. sem_t nuovocliente;
  11.  
  12. void* cliente(void* args){
  13. sem_wait(&vip); // Se c'� un vip attendo.. pft
  14. sem_wait(&coda);//Faccio la fila
  15. //Tocca a me, lascio la coda!
  16. sem_post(&coda);
  17. sem_post(&nuovocliente);// Segnalo che ci sono
  18.  
  19. }
  20. void* vip(void* args){
  21. //Avviso tutti che c'� almeno un vip ;)
  22. pthread_mutex_lock(&m_vip_in_coda);
  23. vip_in_coda++;
  24. if(vip_in_coda == 1)
  25. sem_wait(&vip);
  26. pthread_mutex_unlock(&m_vip_in_coda);
  27. //Avvisati tutti i non vip adesso devono attendere e non entrano in concorrenza con me (che bello essere un vip!)
  28. sem_wait(&coda);
  29. //Tocca a me!
  30. //Libero il posto in coda ed eventualmente se sono l'ultimo VIP avviso tutti che possono provare a entrare
  31. pthread_mutex_lock(&m_vip_in_coda);
  32. if(vip_in_coda == 0)
  33. sem_post(&vip);
  34. pthread_mutex_unlock(&vip_in_coda);
  35. // Uscito dalla coda vado dove necessario, es gestore:
  36. sem_post(&nuovocliente);// Segnalo che ci sono
  37.  
  38.  
  39. }
  40.  
  41. void* gestore(void * args){
  42. sem_wait(&nuovocliente);
  43.  
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement