Jestem nowy w C# i wciąż uczę się koncepcji wątków. Napisałem program, który przedstawia się następującoThreading concept in C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApplication17
{
class Program
{
static void Main(string[] args)
{
System.Threading.ThreadStart th1 = new System.Threading.ThreadStart(prnt);
Thread th = new Thread(th1);
th.Start();
bool t = th.IsAlive;
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i + "A");
}
}
private static void prnt()
{
for (int i = 0; i < 10; i ++)
{
Console.WriteLine(i + "B");
}
}
}
}
Oczekuję wyjście jak: -
1A
2A
1B
3A
2B...
jak wierzę, że zarówno główny wątek i nowo utworzony wątek powinien być wykonujący jednocześnie.
Ale wyjście jest uporządkowane, najpierw wywoływana jest funkcja prnt
, a następnie wykonywana jest metoda pętli .
Twój kod wygląda dobrze; przypuszczalnie trwa to dłużej, zanim nić się zacznie, niż w przypadku głównego wątku. Dodaj 'Thread.Sleep (500);' do każdej pętli 'for'; pomoże to w zapewnieniu dłuższego czasu działania, aby można było zobaczyć, co się dzieje. – JohnLBevan
Planowanie wątków nie jest przewidywalne i wiele programów zawiedzie (warunki wyścigu), ponieważ programista przyjął pewne idealne zachowanie dotyczące wątków, które nie istnieją, na przykład zakładając, że wątki zawsze działają równolegle i w doskonałej synchronizacji. Nie robią tego. Zastanów się, w jaki sposób twój program działa na procesorze z jednym gwintem i systemem operacyjnym z dużym (100 ms +) rozkładem czasu. – Dai