Sono nuovo in C# e sto ancora imparando il concetto di threading. Ho scritto un programma che è la seguenteConcetto di filettatura 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");
}
}
}
}
Mi aspetto un output come: -
1A
2A
1B
3A
2B...
in quanto ritengo che sia thread principale e filo di nuova creazione devono essere in esecuzione contemporaneamente.
Ma l'uscita è ordinata, prima viene chiamata la funzione prnt
e quindi viene eseguito il metodo Main
per il ciclo.
Il tuo codice sembra buono; presumibilmente ci vuole più tempo perché il thread si avvii piuttosto che per il thread principale da completare. Aggiungi 'Thread.Sleep (500);' a ogni ciclo 'for'; questo ti aiuterà a fare in modo di impiegare più tempo per poter vedere cosa sta succedendo. – JohnLBevan
La schedulazione dei thread non è prevedibile e molti programmi hanno esito negativo (condizioni di competizione) perché il programmatore ha assunto un comportamento ideale sui thread che non esistono, ad esempio supponendo che i thread vengano sempre eseguiti in parallelo e in perfetta sincronizzazione. Non lo fanno. Considera come il tuo programma gira su un processore a thread singolo con un sistema operativo con grandi time-slicing (100ms +). – Dai