Esercizio sui Semafori

Documenti analoghi
Esercizio monitor. Sistemi Operativi T 1

Decima Esercitazione. Accesso a risorse condivise tramite Monitor Java

Esercitazione 4 Programmazione Concorrente in Java

Esercizi sul Monitor in Java

UNIVERSITÀ DEGLI STUDI DI BERGAMO

Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Esercitazione 15. Il problema dello Sleeping Barber

Esercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1)

Un esercizio d esame. Flavio De Paoli

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Programmazione multi threaded in Python. Linguaggi dinamici A.A. 2010/2011 1

Lab 4: Locks, Condition Variables in Java

Multithreading in Java. Fondamenti di Sistemi Informativi

Java Virtual Machine

Java threads (2) Programmazione Concorrente

GESTIONE DEI PROCESSI

Esercitazione 3 Monitor. 22 Novembre 2012

Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread

Programmazione concorrente con il linguaggio Java

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM

Esercizio sul Monitor. Ponte con utenti grassi e magri 11 Novembre 2013

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Programmazione concorrente in Java

Gestione dei thread in Java LSO 2008

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Sistemi operativi - Concetti ed esempi -Settima edizione

appunti delle lezioni Architetture client/server: applicazioni server

Esempio: la Toilette Unisex

Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Problemi, algoritmi e oggetti

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Prova d Esame Compito A

Esempio: L EURO-CONVERTITORE (1) Scopo

I THREAD O PROCESSI LEGGERI

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Esercizi di utilizzo del semaforo semplice di competizione per l'uso di una risorsa comune

Lezione 3 programmazione in Java

Laboratorio di Programmazione 1 [Java]

Esercizi Esercizi Università di Salerno

Monitor. Introduzione. Struttura di un TDA Monitor

Il costrutto monitor

Gruppi di Thread. Java threads (3) Gruppi di thread e Timer. Operating Systems. Operating Systems. Java threads 3. Java threads 3

La concorrenza in Java package java.util.concurrent Antonio Furone

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Soluzioni ai problemi di Mutua Esclusione Primitive di sincronizzazione. Soluzioni ai problemi di Mutua EsclusionePrimitive di sincronizzazione

Algoritmi di Ricerca. Esempi di programmi Java

ESERCIZIO SincrAmbGlob-1

Esercizi della lezione 5 di Java

Con il pulsante Start si introducono palline che rimbalzano in un area di disegno fino a che non è terminato il loro ciclo di vita (1000 movimenti).

Sistemi Operativi T. Esercizi

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Esercitazione n.1 13 Ottobre Obiettivi:

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Esercitazione [11] Riepilogo sui Semafori. Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo

Telematica II 17. Esercitazione/Laboratorio 6

Array Bidimensionali in Java. Esempi di Elaborazioni su Matrici

Laboratorio di Ricerca Operativa Cad Ingegneria Gestionale (BGER3 - I semestre) a.a Homework n 10. Docente: Laura Palagi

SISTEMI OPERATIVI. Sincronizzazione in Java (Monitor e variabili condizione in Java)

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Thread e Task. L20_MultiThread 2

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Le basi del linguaggio Java

Chat. Si ha un server in ascolto sulla porta Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Processi e Thread. Walter Cazzola Dipartimento di Informatica e Comunicazione Università à degli Studi di Milano.

Sincronizzazione con Java

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

SISTEMI OPERATIVI. Sincronizzazione in Java (Semafori e barriere) Patrizia Scandurra (MODULO DI INFORMATICA II) LABORATORIO

Architettura Client-Server

Esempio: Interfacce. Gioco Interfacce

Le variabili. Olga Scotti

Programmazione 1 A.A. 2015/2016

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Sistemi Operativi Esercizi Ricapitolazione. Docente: Claudio E. Palazzi

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Il costrutto monitor [Hoare 74]

Capitolo 5. Soluzione: Soluzione in C:

Transcript:

Esercizio sui Semafori Il mercato ortofrutticolo Sistemi Operativi T AA 2011-2012 1

Esercizio di programmazione concorrente in Java Si vuole realizzare un sistema per la gestione delle transazioni commerciali relative a un mercato ortofrutticolo all ingrosso. Il sistema deve permettere a un numero arbitrario di thread concorrenti, ciascuno rappresentante un utente, di effettuare acquisti (nel caso di grossisti) e vendite (nel caso di produttori). Per semplicità si supponga che: il mercato tratti solo un tipo di merce (es. ciliegie), che può essere acquistato/venduto a multipli interi del quintale il prezzo di vendita al quintale (PV) e di acquisto al quintale (PA) siano costanti. Il mercato ha una capacità massima M che esprime il numero massimo di quintali di merce che possono essere immagazzinati. Gli utenti sono quindi di due tipi: Produttore: vende al mercato un quantitativo Qp di merce al prezzo PV; ottiene quindi la somma Qp*PV Grossista: acquista dal mercato un quantitativo Qg di merce al prezzo PA; cede quindi la somma Qg*PA Si sviluppi un applicazione java che, rappresentando ogni utente come un thread concorrente, e utilizzando i semafori come strumenti di sincronizzazione tra thead, realizzi il sistema. Sistemi Operativi T AA 2011-2012 2

Esempio di soluzione Il mercato è una risorsa condivisa dai thread concorrenti -> classe risorsa Le variabili che caratterizzano lo stato della risorsa sono: Merce: la quantità di merce in quintali depositata nel mercato Cassa: la somma (in euro) disponibile nella cassa del mercato Due tipi di thread: Produttore: immette merce e estrae euro Grossista: immette soldi e estrae merce Sincronizzazione: 3 semafori sm: mutua esclusione nell accesso alla risorsa sp: sospensione dei produttori sg: sospensione dei grossisti Sistemi Operativi T AA 2011-2012 3

Thread produttore import java.util.random; public class threadp extends Thread{ // thread Produttore risorsa r; // risorsa condivisa: mercato public threadp(risorsa R)// costruttore { this.r=r; public void run() { int Qp; Qp=(int )(Math.random()*10+1); System.out.print("\n[P]: il mio ID è: "+getname()+" e voglio vendere "+ Qp + " quintali..\n"); r.vendi(qp); // accesso al mercato per vendere //chiude run Sistemi Operativi T AA 2011-2012 4

Thread grossista import java.util.concurrent.*; public class threadg extends Thread{ // thread grossista risorsa r; public threadg(risorsa R) { this.r=r; public void run() { int Qg; Qg=(int)(Math.random()*10+1); System.out.print("\n[G]: il mio ID è: "+getname()+"e voglio acquistare "+ Qg + " quintali..\n"); r.compra(qg); // accesso al mercato per acquistare //chiude run Sistemi Operativi T AA 2011-2012 5

Mercato: risorsa condivisa import java.util.concurrent.*; public class risorsa { // rappresenta il mercato final int PV=10; // prezzo di vendita per i produttori final int PA=12; // prezzo di acquisto per i grossisti final int MAX= 100; // capacità massima mercato int merce, cassa; Semaphore sp; /* per la sospensione dei produttori; */ Semaphore sg; /* per la sospensione dei grossisti */ int sospesip; // numero thread produttori sospesi su Sp // in attesa di soldi o di spazio int sospesig; // numero thread grossisti sospesi su sg // in attesa della merce richiesta Semaphore sm; // semaforo di mutua esclusione // continua.. Sistemi Operativi T AA 2011-2012 6

// continua classe risorsa public risorsa(int M, int C) // costruttore { sp=new Semaphore (0); sg=new Semaphore (0); sm=new Semaphore (1); // sem. di mutua esclusione merce=m; cassa=c; sospesig=0; sospesip=0; // continua.. Sistemi Operativi T AA 2011-2012 7

//.. continua public void compra(int quintali) // eseguita da grossisti { int i; int prezzo; // prezzo totale prezzo=quintali*pa; try{ sm.acquire(); // inizio sezione critica while (quintali>merce) { sospesig++; sm.release(); sg.acquire(); // attesa sm.acquire(); merce=merce-quintali; cassa=cassa+prezzo; while (sospesip>0) // risveglio i produttori { sp.release(); sospesip--; sm.release(); //fine sez critica catch(interruptedexception e){ // continua.. Sistemi Operativi T AA 2011-2012 8

//.. continua public void vendi(int quintali) // eseguita da produttori { int i; int ricavo; // ricavo dalla vendita ricavo=quintali*pv; try{ sm.acquire(); // inizio sezione critica while ((ricavo>cassa) (quintali+merce>max)) { sospesip++; sm.release(); sp.acquire(); // attesa sm.acquire(); merce=merce+quintali; cassa=cassa-ricavo; while (sospesig>0) // risveglio i grossisti { sg.release(); sospesig--; sm.release(); //fine sez critica catch(interruptedexception e){ // fine classe risorsa Sistemi Operativi T AA 2011-2012 9

Programma di test import java.util.concurrent.*; public class mercato{ public static void main(string args[]) { int i; final int NP=10;//produttori final int NG=10; //grossisti final int MERCE=9; // quintali inizialmente nel mercato final int CASSA=50; //soldi disponibili in cassa risorsa R=new risorsa(merce, CASSA); System.out.print("\nSISTEMA AVVIATO: ci sono "+ MERCE +" quintali e "+ CASSA + " EURO...\n"); threadp []TP=new threadp[np]; //thread produttori threadg []TG=new threadg[ng]; //thread grossisti for (i=0; i<np; i++) TP[i]=new threadp(r); for (i=0; i<ng; i++) TG[i]=new threadg(r); for (i=0;i<np; i++) TP[i].start(); for (i=0;i<ng; i++) TG[i].start(); Sistemi Operativi T AA 2011-2012 10