Co to jest wątek?


Wątek w C#

Mówiąc w prosty sposób wątek jest to niezależna ścieżka wykonywania kodu. Jeden wątek może działać jednocześnie z innymi wątkami.

Program napisany w języku C# jest uruchamiany jako pojedynczy wątek, który jest tworzony automatycznie przez środowisko uruchomieniowe CLR i system operacyjny. Program staje się wielowątkowy gdy utworzone zostaną nowe wątki.


Szczegóły - mechanizm działania oraz przykłady

Klasa Thread

Do tworzenia wątków oraz zarządzania nimi służy klasa Thread. Jako parametr konstruktora przekazuje się delegat (ang. delegate), który ma zostać uruchomiony w nowym wątku. Gdy przekazany delegat kończy działanie, wątek też zostaje automatycznie zakończony. Raz zamkniętego wątku nie można wystartować ponownie.

Przykład
static void Main(string[] args)
{
    Thread t = new Thread(WriteSomething); 
    t.Start();

    for (int i = 0; i < 500; i++) Console.Write("-");
}

static void WriteSomething()
{
    for (int i = 0; i < 500; i++) Console.Write("|");
}

Wynik
------------------------------------------------------------||||----||||||||-----------------------------------|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Jak widać samo utworzenie wątku nie wystarczy, trzeba go wystartować przy pomocy metody Start().

Dostęp do danych

Wątki mogą ze sobą współdzielić dane i jest to niewątpliwie zaleta, należy jednak pamiętać o odpowiedniej synchronizacji danych oraz zasadach na jakich dane mogę być zmieniane.

Przykład
class Program
{
    public static int counter = 0;
    static void Main(string[] args)
    {
        new Thread(StartCounting).Start();
        StartCounting();
    }

    static void StartCounting()
    {
        if (counter < 1)
        {
            counter += 1;
        }
        Console.Write(counter);
    }
}
Wynik na konsoli:
11

Wydawać by się mogło, że wartość counter powinna zmienić się już po pierwszym wykonaniu funkcji StartCounting(), program jednak działa na tyle szybko, że zanim nastąpi inkrementacja wartości, oba wątki dokonały już sprawdzenia.


© 2021 - SkillsTest.pl | | Regulamin | Polityka Prywatnosci