Hej,
W książce rozpocząłem temat wątków i lockowania danego wątku. Z tej okazji przepisałem prawie identyczny edukacyjny kod z książki, jednak u mnie nie dziala on prawidłowo. Powinno w danym momencie zalockować wątek, tak aby dany jeden wątek wyświetlił na konsoli liczby od 1 - 10, potem następny. Jednak tak się nie dzieje i wyświetlane są liczby z różnych wątków równolegle. Monitor.Enter() i blok try/finally to to samo co oznaczenie tej cześci kodu jako lock, także można zrobić po swojemu.
class Program
{
static void Main(string[] args)
{
Thread[] threads = new Thread[10];
for(int i=0;i<10;i++)
{
threads[i] = new Thread(new ThreadStart(new Printer().Print));
threads[i].Name = "Thread " + i;
}
foreach(Thread thread in threads)
{
thread.Start();
}
Console.ReadLine();
}
}
class Printer
{
private readonly object threadlock = new object();
public void Print()
{
Monitor.Enter(threadlock);
try
{
for (int i = 0; i < 10; i++)
{
Random random = new Random();
Console.WriteLine("Thread {0} : {1}", Thread.CurrentThread.Name, i);
Thread.Sleep(500 * random.Next(5));
}
}
finally
{
Monitor.Exit(threadlock);
}
}
}
Może popełniłem jakiś mały drobny błąd, może robię coś źle. Fajnie byłoby gdyby, ktoś zajrzał na ten kod i podpowiedział co robię źlę. Dzięki!