Loading Lezione1_Thread/Program.cs +110 −11 Original line number Diff line number Diff line using System; using System.Threading; using System.Collections.Generic; // Necessario se si usano liste, qui solo per chiarezza using System.Collections.Generic; using System.Security.Cryptography.X509Certificates; using System.ComponentModel; // Necessario se si usano liste, qui solo per chiarezza public class Lezione1 { // Metodo che verrà eseguito in parallelo dal thread public static void SuonaCampana(string suono) /* // Metodo che verrà eseguito in parallelo dal thread public static void SuonaCampanaDin() { // Random è locale per evitare Race Condition sull'oggetto Random stesso Random rand = new Random(); Console.WriteLine($"\n--- INIZIO: Campana '{suono}' ---"); Console.WriteLine($"\n--- INIZIO: Campana DIN ---\n"); for (int i = 0; i < 5; i++) { Console.Write($"{suono} "); Console.Write($"DIN "); Thread.Sleep(500); } Console.WriteLine($"\n--- FINE: Campana '{suono}' ---"); Console.WriteLine($"\n--- FINE: Campana DIN ---"); } public static void SuonaCampanaDon() { // Random è locale per evitare Race Condition sull'oggetto Random stesso Random rand = new Random(); Console.WriteLine($"\n--- INIZIO: Campana DON ---\n"); public static void Main(string[] args) for (int i = 0; i < 5; i++) { Console.Write($"DON "); Thread.Sleep(500); } Console.WriteLine($"\n--- FINE: Campana DON ---"); } public static void SuonaCampanaDan() { // Random è locale per evitare Race Condition sull'oggetto Random stesso Random rand = new Random(); Console.WriteLine($"\n--- INIZIO: Campana DAN ---\n"); for (int i = 0; i < 5; i++) { Console.Write($"DAN "); Thread.Sleep(500); } Console.WriteLine($"\n--- FINE: Campana DAN ---"); } public static void Main(string[] args) { // Creazione di 3 thread Thread t_din = new Thread(SuonaCampanaDin); Thread t_don = new Thread(SuonaCampanaDon); Thread t_dan = new Thread(SuonaCampanaDan); Console.WriteLine("Avvio delle campane in parallelo..."); // Avvio dei thread t_din.Start(); t_dan.Start(); t_don.Start(); // Per assicurarsi che il main aspetti la fine dei thread t_din.Join(); t_dan.Join(); t_don.Join(); Console.WriteLine("\n\n--- Tutti i thread sono terminati. Programma chiuso. ---"); */ public static void Main(string[] args) { Thread t_fattoriale = new Thread(Fattoriale); Thread t_somma = new Thread(CalcoloSomma); Thread t_conversione = new Thread(Conversione); Console.WriteLine("Avvio i Thread..."); t_fattoriale.Start(); t_somma.Start(); t_conversione.Start(); } public static void Fattoriale() { Console.WriteLine("\n\nCalcolo del fattoriale di 10..."); int fattoriale = 10; for (int i = 10 - 1; i > 1; i--) { fattoriale *= i; } Console.WriteLine($"Il fattoriale di 10 è {fattoriale} "); } public static void CalcoloSomma() { Thread.Sleep(50); Console.WriteLine("\n\nCalcolo della somma da 0 a 10000..."); int somma = 0; for (int i = 0; i <= 10000; i++) { somma += i; } Console.WriteLine($"La somma da 0 a 10000 è {somma} "); } public static void Conversione() { Thread.Sleep(100); int numero = 10000; Thread.Sleep(100); Console.WriteLine($"\n\nConversione del numero {numero} in binario..."); string risultato = Convert.ToString(numero, 2); Console.WriteLine($"La conversione del numero {numero} è: {risultato} "); } } Loading
Lezione1_Thread/Program.cs +110 −11 Original line number Diff line number Diff line using System; using System.Threading; using System.Collections.Generic; // Necessario se si usano liste, qui solo per chiarezza using System.Collections.Generic; using System.Security.Cryptography.X509Certificates; using System.ComponentModel; // Necessario se si usano liste, qui solo per chiarezza public class Lezione1 { // Metodo che verrà eseguito in parallelo dal thread public static void SuonaCampana(string suono) /* // Metodo che verrà eseguito in parallelo dal thread public static void SuonaCampanaDin() { // Random è locale per evitare Race Condition sull'oggetto Random stesso Random rand = new Random(); Console.WriteLine($"\n--- INIZIO: Campana '{suono}' ---"); Console.WriteLine($"\n--- INIZIO: Campana DIN ---\n"); for (int i = 0; i < 5; i++) { Console.Write($"{suono} "); Console.Write($"DIN "); Thread.Sleep(500); } Console.WriteLine($"\n--- FINE: Campana '{suono}' ---"); Console.WriteLine($"\n--- FINE: Campana DIN ---"); } public static void SuonaCampanaDon() { // Random è locale per evitare Race Condition sull'oggetto Random stesso Random rand = new Random(); Console.WriteLine($"\n--- INIZIO: Campana DON ---\n"); public static void Main(string[] args) for (int i = 0; i < 5; i++) { Console.Write($"DON "); Thread.Sleep(500); } Console.WriteLine($"\n--- FINE: Campana DON ---"); } public static void SuonaCampanaDan() { // Random è locale per evitare Race Condition sull'oggetto Random stesso Random rand = new Random(); Console.WriteLine($"\n--- INIZIO: Campana DAN ---\n"); for (int i = 0; i < 5; i++) { Console.Write($"DAN "); Thread.Sleep(500); } Console.WriteLine($"\n--- FINE: Campana DAN ---"); } public static void Main(string[] args) { // Creazione di 3 thread Thread t_din = new Thread(SuonaCampanaDin); Thread t_don = new Thread(SuonaCampanaDon); Thread t_dan = new Thread(SuonaCampanaDan); Console.WriteLine("Avvio delle campane in parallelo..."); // Avvio dei thread t_din.Start(); t_dan.Start(); t_don.Start(); // Per assicurarsi che il main aspetti la fine dei thread t_din.Join(); t_dan.Join(); t_don.Join(); Console.WriteLine("\n\n--- Tutti i thread sono terminati. Programma chiuso. ---"); */ public static void Main(string[] args) { Thread t_fattoriale = new Thread(Fattoriale); Thread t_somma = new Thread(CalcoloSomma); Thread t_conversione = new Thread(Conversione); Console.WriteLine("Avvio i Thread..."); t_fattoriale.Start(); t_somma.Start(); t_conversione.Start(); } public static void Fattoriale() { Console.WriteLine("\n\nCalcolo del fattoriale di 10..."); int fattoriale = 10; for (int i = 10 - 1; i > 1; i--) { fattoriale *= i; } Console.WriteLine($"Il fattoriale di 10 è {fattoriale} "); } public static void CalcoloSomma() { Thread.Sleep(50); Console.WriteLine("\n\nCalcolo della somma da 0 a 10000..."); int somma = 0; for (int i = 0; i <= 10000; i++) { somma += i; } Console.WriteLine($"La somma da 0 a 10000 è {somma} "); } public static void Conversione() { Thread.Sleep(100); int numero = 10000; Thread.Sleep(100); Console.WriteLine($"\n\nConversione del numero {numero} in binario..."); string risultato = Convert.ToString(numero, 2); Console.WriteLine($"La conversione del numero {numero} è: {risultato} "); } }