Advertisement
Guest User

Untitled

a guest
May 26th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.83 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6.  
  7. namespace ConsoleApplication1
  8. {
  9.     class Program
  10.     {
  11.         static int numBigliettiDisponibili = 20;
  12.         static Semaphore sem = new Semaphore(1, 1);
  13.        
  14.         static void vendiBiglietti()
  15.         {
  16.             int numTotaleVenduti = 0;
  17.             Random rnd = new Random();
  18.             Console.WriteLine(Thread.CurrentThread.Name + " > ha aperto.");
  19.  
  20.             while (true)
  21.             {
  22.                 sem.WaitOne();
  23.                 //INIZIO REGIONE CRITICA
  24.  
  25.                 Console.WriteLine(Thread.CurrentThread.Name + " > I biglietti disponibili sono: " + numBigliettiDisponibili);
  26.  
  27.                 if (numBigliettiDisponibili == 0)
  28.                 {
  29.                     Console.WriteLine(Thread.CurrentThread.Name + " > Non ci sono più biglietti, dovrei chiudere.");
  30.                     sem.Release();
  31.                     break;
  32.                 }
  33.                 else
  34.                 {
  35.                     int numBigliettiRichiesti = rnd.Next(1, 4);
  36.  
  37.                     Console.WriteLine(Thread.CurrentThread.Name + " > Biglietti - Richiesti: " + numBigliettiRichiesti + " Disponibili: " + numBigliettiDisponibili);
  38.  
  39.                     if (numBigliettiRichiesti <= numBigliettiDisponibili)
  40.                     {
  41.                         Console.WriteLine(Thread.CurrentThread.Name + " > Posso vendere i biglietti richiesti");
  42.                         numBigliettiDisponibili -= numBigliettiRichiesti;
  43.                         numTotaleVenduti += numBigliettiRichiesti;
  44.                     }
  45.                     else
  46.                     {
  47.                         Console.WriteLine(Thread.CurrentThread.Name + " > Non posso vendere i biglietti richiesti");
  48.                     }
  49.                 }
  50.  
  51.                 Console.WriteLine(Thread.CurrentThread.Name + " > è in pausa");
  52.                 Thread.Sleep(1000);
  53.                 sem.Release();
  54.                 //FINE REGIONE CRITICA
  55.             }
  56.  
  57.             Console.WriteLine(Thread.CurrentThread.Name + " > ha chiuso vendendo "+numTotaleVenduti);
  58.  
  59.         }
  60.  
  61.         // esempio di metodo con parametro
  62.         // static void metodo(Object a) { Console.WriteLine("Parametro " + a); }
  63.  
  64.         static void Main(string[] args)
  65.         {
  66.             const int numeroCasseThread = 3;
  67.             Thread[] tArray = new Thread[numeroCasseThread];
  68.  
  69.             for (int i = 0; i < numeroCasseThread; i++)
  70.             {
  71.                 tArray[i] = new Thread(vendiBiglietti);
  72.                 tArray[i].Name = "cassa_" + (i + 1);
  73.                 tArray[i].Start();
  74.             }
  75.  
  76.             //for (int i = 0; i < numeroCasseThread; i++) tArray[i].Join();
  77.             //Console.WriteLine("Il valore finale di a e: " + b);
  78.         }
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement