@ŁF: Bardziej szczegółowo nie potrafię tego tematu zatytułować (poprzedni temat "Multithreading"), gdyż dotyczy od niepoprawnej implementacji wielowątkowości. Wzorowałem się na tym temacie: [C#] MultiThreading Problem , gdyż nie został on przez nikogo usunięty. Tagi z tego co zauwałem są już automatycznie dodawane.
Chciałbym, żeby w tym programie były wyświetlane kolejne liczby od 0 do 100. Ale trybie debug wątki rozpoczynają pracę dopiero po zakończeniu metody main. Bez debugowania pokazuje się tylko 1 i 0. Próbowałem robić to na różne sposoby, ale za każdym razem dostaje inne wyniki. Jak dodam jakąkolwiek funkcje (np Console.WriteLine()) do metody main po rozpoczęciu wątku to wątki dobrze działąją. Co może być przyczyną takiego nieprzewidywalnego zachowania? Próbowałem zakłądać blokady w różnych miejscach, ale bez skutku.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Runtime.Remoting.Messaging;
namespace ConsoleApplication1
{
class Program
{
static int counter = 0;
static object o=new object();
static void Main(string[] args)
{
Action a = new Action(WriteY);
Action b = new Action(WriteX);
IAsyncResult ar=a.BeginInvoke(null, null);
IAsyncResult ar2= b.BeginInvoke(null, null);
Console.WriteLine();
Console.ReadKey();
}
static void WriteX()
{
while (counter < 100)
{
lock (o)
{
Console.WriteLine(counter++);
}
}
}
static void WriteY()
{
while(counter<100)
{
lock (o)
{
Console.WriteLine(counter++);
}
}
}
}
}