Esperimenti con semafori e monitor in C
Jump to navigation
Jump to search
Ho messo a vostra disposizione alcuni sorgenti che implementano in C le astrazioni di semafro e monitor come le abbiamo viste (o vedremo presto) a lezione.
Ho messo il materiale in questo file.
La directory comprende:
- un Makefile
- tlist.[ch] un modulo di implementazione di liste circolari di thread_id (usate per gestire i processi bloccati). Le liste possono essere usate come code o stack.
- suspend.[ch] è il modulo che implementa la sospensione e riattivazione dei pthread (usando il segnale SIGUSR1).
- semaphore.[ch] implementazione dei semafori fair
- monitor.[ch] implementazione dei monitor (con semantica signal urgent per le variabili di condizione).
- prod_cons.c esempio: produttore consumatore con i semafori
- bounded_buf.c esempio: bounded_buffer con i semafori
- bounded_buf_mon.c esempio: bounded buffer con i monitor
- philo.c: cena dei filosofi (la soluzione è volutamente errata e può generare deadlock
uso dei semafori
Se volete fare altri esperimenti con i semafori dovete includere il file semaphore.h nei vostri sorgenti C.
Un semaforo ha tipo semaphore e viene creato in questo modo
semaphore mutex;
mutex = mutex_create(1);
(ovviamente le variabili semaphore devono essere condivise e 1 è solo l'esempio di valore iniziale per un semaforo mutex)
Le operazioni P e V su mutex si scrivono così:
semaphore_P(mutex);
semaphore_V(mutex);