Skip to content

Laboratorio #2 del corso PROGRAMMAZIONE CONCORRENTE E ALGORITMI DISTRIBUITI (80302) UNIGE

Notifications You must be signed in to change notification settings

GherardiGiacomo/PCAD_Lab2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PCAD 23/24 - Laboratorio 2

1 Semafori

          IMPORTANTE: compilare con gcc -o a philo.c my_semaphore.c -lpthread ed eseguire ./a

Lo scopo di questo esercizio è di farvi implementare semafori in C. Scrivete in un header file my_semaphore.h la struttura di dati e le prototipe come indicato sotto:

#include <pthread.h>

typedef struct my_semaphore{
volatile unsigned int V;
pthread_mutex_t lock;
pthread_cond_t varcond;
} my_semaphore;
int my_sem_init(my_semaphore ⁎ms , unsigned int v);
int my_sem_wait(my_semaphore ⁎ms);
int my_sem_signal(my_semaphore ⁎ms);
int my_sem_destroy(my_semaphore ⁎ms);

Vi chiediamo di implementare in un filemy_semaphore.c, le funzionemy_sem_init, my_sem_wait, my_sem_signalemy_sem_destroy e di testarli in un programma che metterete in un altro file, per esempio implementando la soluzione dei filosofi con un sala d’attesa.

Per la semantica delle due ultime funzione my_sem_init e my_sem_wait è quella dei (weak) semafori presentati a lezione. Per quanto riguardamy_sem_init, inizializza i vari campi di un semaforo emy_sem_destroy libera i campi (chiamando le funzione pthread_mutex_destroy e pthread_cond_destroy).

Ciascuna di queste tre funzione ritorna 0, se tutto è andato a buon fine.

2 Problema del bus

Abbiamo N passeggeri e un bus turistico con C posti ( con C<N ). Il comportamento del bus segue le regole:

(a) Aspetta di essere pieno (che C passeggeri sono saliti). (b) Fa il giro della città. (c) Arrive al punto di partenza e aspetta che tutti i passeggeri saliti scendono e torna in (a).

Il comportamento di un passagere segue le regole:

(a’) Prova a salire nel bus se c’è ancora posta, altrimenti aspetta (in un modo passivo).

(b’) Una volta salito, fa il giro turistico nel bus.

(c’) Scende dal bus e torna in (a’).

Usando dei lock, delle variabile condizionale o dei semafori, programmate questo sistemo dove il bus e ciascun passeggero verrà ripresentato da un thread. Ovviamente per testare vostra implementazione, dovrete fissare valori per C e N.

Indicazioni: Potete usare un contatore condiviso per contarre il numero di persone salite nel bus e dovete chiedervi chi deve ’svegliare’ le entità in attesa (ad esempio l’ultimo passeggero a salire nel bus sveglierà il bus in attesa).

About

Laboratorio #2 del corso PROGRAMMAZIONE CONCORRENTE E ALGORITMI DISTRIBUITI (80302) UNIGE

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages