Vai al contenuto principale
Pubblicato il

Classe Thread in C#

Condividi:

Introduzione

La programmazione multithread è una tecnica che consente l'esecuzione concorrente di due o più parti di un programma per massimizzare l'utilizzo della CPU. In C#, Thread è la classe base per creare e lavorare con i thread.

Caratteristiche della Classe Thread

La classe Thread, che fa parte del namespace System.Threading, offre una serie di funzionalità per creare, controllare e ottenere informazioni sui thread:

  • Creazione di Thread: Con la classe Thread, è possibile avviare un'attività in background.
  • Controllo: Consente di mettere in pausa, riprendere o terminare un thread.
  • Informazioni: Fornisce dati sullo stato attuale del thread, come se è in esecuzione, sospeso, terminato, ecc.
  • Priorità: La priorità di un thread può essere regolata, il che influisce sull'ordine di esecuzione dei thread.

Metodi Comuni

Ecco alcuni dei metodi più utilizzati:

Thread.Start()

  • Avvia l'esecuzione del thread.

Thread.Join()

  • Blocca il thread chiamante fino al termine dell'esecuzione del thread su cui viene chiamato. Utile per garantire che un thread termini prima che un altro inizi.

Thread.Sleep(int millisecondi)

  • Mette in pausa il thread in esecuzione per il numero di millisecondi specificato.

Esempio Illustrativo

L'esempio seguente illustra la creazione e l'esecuzione di un thread, nonché il controllo del flusso di esecuzione tra due thread.

using System;
using System.Threading;

namespace Esempi {
  class DemoThread {
    private Thread nuovoThread;

    public void Avvia() {
      nuovoThread = new Thread(TaskSecondario);
      nuovoThread.Start();

      for (int indice = 1; indice <= 5; indice++) {
        Console.WriteLine($"Metodo Avvia() #{indice}");
        Thread.Sleep(1000);
      }

      Console.WriteLine("Il task Avvia() è completato.");

      nuovoThread.Join();

      Console.WriteLine("Il task TaskSecondario() è completato.");
    }

    private void TaskSecondario() {
      for (int indice = 1; indice <= 10; indice++) {
        Console.WriteLine($"TaskSecondario() #{indice}");
        Thread.Sleep(1000);
      }
    }
  }
}

Considerazioni

Quando si lavora con più thread, è fondamentale tenere a mente alcune considerazioni:

  1. Deadlock: Situazioni in cui due o più thread si aspettano indefinitamente a vicenda.
  2. Race Condition: Quando più thread tentano di accedere e modificare una variabile contemporaneamente.
  3. Sincronizzazione: Utilizzo di meccanismi come lock, Monitor e Mutex per garantire che le risorse vengano accedute da un thread alla volta.

Conclusione

La programmazione multithread può fornire applicazioni più veloci e reattive. Tuttavia, porta con sé una serie di sfide. Fortunatamente, C# offre strumenti robusti, come la classe Thread, per aiutare gli sviluppatori ad affrontare queste sfide.

Happy coding!