OBIETTIVI / ARGOMENTI TRATTATI
- i semafori
PROCEDIMENTO / SPECIFICHE INIZIALI
- risolvere l'esercizio precedente utilizzando i semafori
ESERCITAZIONE 4 - Competizione tra thread Linux (27/04/16)
OBIETTIVI / ARGOMENTI TRATTATI
- La competizione tra i Thread
- i mutex
- Scrivere il programma (th_thread_mutex_wrong.c) che sviluppi il codice seguente, seguire le indicazioni presenti nei commenti
/*Interazione di processi tramite memoria condivisa
Competizione: interazione prevedibile ma "non desiderata" tra processi che interagiscono per sincronizzarsi nell'accesso a risorse comuni
*/
#include <stdio.h> // printf
#include <unistd.h> // usleep
#include <stdlib.h> // exit,
#include <pthread.h> // thread, pthread_t, pthread_create
int SaldoCassa; //Variabile globale
#define NUM_PANINI 10 //Numero di panini da vendere
#define NUM_BIRRE 15
#define COSTO_PANINO 3 //Costo del singolo panino
#define COSTO_BIRRA 4
#define DELAY_PANINO 100 //[msec] ritardo aggiornamento saldo cassa
#define DELAY_BIRRA 50 //[msec] ritardo aggiornamento saldo cassa
//Il thread CassaPanini per ogni panino da vendere (NUM_PANINI) legge il SaldoCassa,
//aspetta per il tempo DELAY_PANINO (useep(DELAY_PANINO*1000)) e aggiorna il SaldoCassa con il valore letto precedentemente più il costo del panino
//Visualizza un messaggio con il saldo cassa aggiornato
void *CassaPanini(void *arg);
void *CassaBirra(void *arg);
//Il MainThread: visualizza il SaldoCassa iniziale, avvia i due thread
//aspetta la conclusione dei due thread, visualizza il SaldoCassa finale
int main(int argc, char *argv[])
{
...
- Scrivere il programma (th_thread_mutex.c) che risolva i problemi dell'esercizio precedente utilizzando i mutex
pthread_mutex_t count_mutex = PTHREAD_MUTEX_INITIALIZER;
// Lock mutex and then wait for signal to relase mutex
pthread_mutex_lock( &count_mutex );
pthread_mutex_unlock( &count_mutex );
RIFERIMENTI / LINK
- I Processi Unix
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 3 - Gestione di processi Unix (02/03/16)
Gestione dei segnali Unix
OBIETTIVI / ARGOMENTI TRATTATI
- Gestione dei segnali Unix
Scrivere un programma che crei un processo figlio e gestisca il segnale SIGCHLD:
- il processo figlio deve visualizzare un messaggio all'avvio, al termine, dovrà durare almeno 5 secondi (usare la funzione sleep e dovrà terminare con un exit status diverso da zero;
- il processo padre dovrà gestire il segnale SIGCHLD e dopo aver creato il processo figlio eseguirà un ciclo infinito al cui interno, ad intervalli di 1 sec, visualizzerà il messaggio "Ciclo infinito...[%d]"
- nel processo padre alla ricezione del segnale SIGCHLD tramite l'istruzione wait verrà visualizzato lo stato di terminazione del processo figlio e il processo padre terminerà
- il processo figlio deve visualizzare un messaggio all'avvio, al termine, dovrà durare almeno 5 secondi (usare la funzione sleep e dovrà terminare con un exit status diverso da zero;
- il processo padre dovrà gestire il segnale SIGCHLD e dopo aver creato il processo figlio eseguirà un ciclo infinito al cui interno, ad intervalli di 1 sec, visualizzerà il messaggio "Ciclo infinito...[%d]"
- nel processo padre alla ricezione del segnale SIGCHLD tramite l'istruzione wait verrà visualizzato lo stato di terminazione del processo figlio e il processo padre terminerà
RIFERIMENTI / LINK
- https://github.com/filippo-bilardo/C_Raspi_Projects/blob/master/Processi/
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 2 - Gestione di processi Unix (24/02/16)
Gestione dei processi Unix utilizzando la funzione wait(), exec..() e perror() nel linguaggio C
OBIETTIVI / ARGOMENTI TRATTATI
- Gestione dei processi Unix
Scrivere un programma che generi tre processi figli:
- il primo figlio visualizza un messaggio contenente il proprio pid, il pid del padre
e il risultato della operazione a+b (variabili a e b sono inizializzate prima dalla istruzione fork)
e termina restituendo come exit status il risultato della operazione
- il secondo figlio esegue il comando Linux "ps -ux"
- il terzo figlio esegue il comando Linux "ls /pippo"
Il processo padre aspetta il termine di ognuno dei tre processi figli visualizzandone l'exit staus
Eventuali errori devono essere gestiti con la funzione perror
- il primo figlio visualizza un messaggio contenente il proprio pid, il pid del padre
e il risultato della operazione a+b (variabili a e b sono inizializzate prima dalla istruzione fork)
e termina restituendo come exit status il risultato della operazione
- il secondo figlio esegue il comando Linux "ps -ux"
- il terzo figlio esegue il comando Linux "ls /pippo"
Il processo padre aspetta il termine di ognuno dei tre processi figli visualizzandone l'exit staus
Eventuali errori devono essere gestiti con la funzione perror
RIFERIMENTI / LINK
- 3. Processi Unix
- https://github.com/filippo-bilardo/C_Raspi_Projects/blob/master/Processi/fork3_solv2.c
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 1 - Creazioni di processi Unix (25/01/16)
Creazione di processi Unix utilizzando la funzione fork() nel linguaggio C
OBIETTIVI / ARGOMENTI TRATTATI
- Comprensione dei processi Unix
- Completare il programma di esempio seguendo le indicazioni presenti nei commenti
RIFERIMENTI / LINK
- 3. Processi Unix
-------------------------------------------------------------------------------------------------------------
versione iniziale del 25/01/16
Nessun commento:
Posta un commento