Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Codice usato per problemi di sincronizzazione dove � necessario gestire un problema di priorit�
- creando una coda e facendo si che i vip abbiano la precedenza sui clienti nella coda. */
- sem_t coda;
- pthread_mutex_t m_vip_in_coda;
- int vip_in_coda = 0;
- sem_t nuovocliente;
- void* cliente(void* args){
- sem_wait(&vip); // Se c'� un vip attendo.. pft
- sem_wait(&coda);//Faccio la fila
- //Tocca a me, lascio la coda!
- sem_post(&coda);
- sem_post(&nuovocliente);// Segnalo che ci sono
- }
- void* vip(void* args){
- //Avviso tutti che c'� almeno un vip ;)
- pthread_mutex_lock(&m_vip_in_coda);
- vip_in_coda++;
- if(vip_in_coda == 1)
- sem_wait(&vip);
- pthread_mutex_unlock(&m_vip_in_coda);
- //Avvisati tutti i non vip adesso devono attendere e non entrano in concorrenza con me (che bello essere un vip!)
- sem_wait(&coda);
- //Tocca a me!
- //Libero il posto in coda ed eventualmente se sono l'ultimo VIP avviso tutti che possono provare a entrare
- pthread_mutex_lock(&m_vip_in_coda);
- if(vip_in_coda == 0)
- sem_post(&vip);
- pthread_mutex_unlock(&vip_in_coda);
- // Uscito dalla coda vado dove necessario, es gestore:
- sem_post(&nuovocliente);// Segnalo che ci sono
- }
- void* gestore(void * args){
- sem_wait(&nuovocliente);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement