Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace ConsoleApplication1
- {
- class Program
- {
- static int numBigliettiDisponibili = 20;
- static Semaphore sem = new Semaphore(1, 1);
- static void vendiBiglietti()
- {
- int numTotaleVenduti = 0;
- Random rnd = new Random();
- Console.WriteLine(Thread.CurrentThread.Name + " > ha aperto.");
- while (true)
- {
- sem.WaitOne();
- //INIZIO REGIONE CRITICA
- Console.WriteLine(Thread.CurrentThread.Name + " > I biglietti disponibili sono: " + numBigliettiDisponibili);
- if (numBigliettiDisponibili == 0)
- {
- Console.WriteLine(Thread.CurrentThread.Name + " > Non ci sono più biglietti, dovrei chiudere.");
- sem.Release();
- break;
- }
- else
- {
- int numBigliettiRichiesti = rnd.Next(1, 4);
- Console.WriteLine(Thread.CurrentThread.Name + " > Biglietti - Richiesti: " + numBigliettiRichiesti + " Disponibili: " + numBigliettiDisponibili);
- if (numBigliettiRichiesti <= numBigliettiDisponibili)
- {
- Console.WriteLine(Thread.CurrentThread.Name + " > Posso vendere i biglietti richiesti");
- numBigliettiDisponibili -= numBigliettiRichiesti;
- numTotaleVenduti += numBigliettiRichiesti;
- }
- else
- {
- Console.WriteLine(Thread.CurrentThread.Name + " > Non posso vendere i biglietti richiesti");
- }
- }
- Console.WriteLine(Thread.CurrentThread.Name + " > è in pausa");
- Thread.Sleep(1000);
- sem.Release();
- //FINE REGIONE CRITICA
- }
- Console.WriteLine(Thread.CurrentThread.Name + " > ha chiuso vendendo "+numTotaleVenduti);
- }
- // esempio di metodo con parametro
- // static void metodo(Object a) { Console.WriteLine("Parametro " + a); }
- static void Main(string[] args)
- {
- const int numeroCasseThread = 3;
- Thread[] tArray = new Thread[numeroCasseThread];
- for (int i = 0; i < numeroCasseThread; i++)
- {
- tArray[i] = new Thread(vendiBiglietti);
- tArray[i].Name = "cassa_" + (i + 1);
- tArray[i].Start();
- }
- //for (int i = 0; i < numeroCasseThread; i++) tArray[i].Join();
- //Console.WriteLine("Il valore finale di a e: " + b);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement