C# 为什么主线程';谁的委托先被调用?
我是C#中多线程的新手。我创建了以下程序:C# 为什么主线程';谁的委托先被调用?,c#,multithreading,C#,Multithreading,我是C#中多线程的新手。我创建了以下程序: class Program { static void Main(string[] args) { Thread.CurrentThread.Name = "main"; Thread t = new Thread(PrintName); t.Name = "worker"; t.Start(); P
class Program
{
static void Main(string[] args)
{
Thread.CurrentThread.Name = "main";
Thread t = new Thread(PrintName);
t.Name = "worker";
t.Start();
PrintName();
Console.ReadKey();
}
static void PrintName()
{
Console.WriteLine("Hello from " + Thread.CurrentThread.Name);
}
}
输出是
梅因你好
工人你好
如果我将PrintName()
方法的主体更改为
static void PrintName()
{
if (Thread.CurrentThread.Name == "main")
{
Thread.Sleep(x);
}
Console.WriteLine("Hello from " + Thread.CurrentThread.Name);
}
如果x
>=2,则按相反顺序输出消息
为什么会这样?我的推理是,在第一种情况下,即使在
Main()
方法中t.Start()
在PrintName()
之前,线程调度程序也没有足够的时间在Main
和worker
线程之间切换执行,因此也没有足够的时间来切换输出。有人能澄清/否定我的假设吗?你问的问题通常是在操作系统/多线程入门课程中向大学生展示的第一张幻灯片。本质上,您拥有的是线程的执行,而不使用或其他来指定您的执行。因此,您的执行线程是一系列指令,这些指令与多线程环境中的其他此类序列同时执行。当这种情况发生时,正如@Andreas和@kurast所提到的,您的程序将变得随机。本质上,这在C#中归结为首先执行的字节码,它可以在程序的每次执行中改变。要解决这个问题,请阅读并发控制、竞争条件和关键部分,以便精确定义线程的调度
以下是几个关于多线程的好参考:
如果您有任何问题,请告诉我 您要问的问题通常是在操作系统/多线程入门课程中向大学生展示的第一张幻灯片。本质上,您拥有的是线程的执行,而不使用或其他来指定您的执行。因此,您的执行线程是一系列指令,这些指令与多线程环境中的其他此类序列同时执行。当这种情况发生时,正如@Andreas和@kurast所提到的,您的程序将变得随机。本质上,这在C#中归结为首先执行的字节码,它可以在程序的每次执行中改变。要解决这个问题,请阅读并发控制、竞争条件和关键部分,以便精确定义线程的调度 以下是几个关于多线程的好参考:
如果您有任何问题,请告诉我 你不能指望任何订单,这是没有保证的。如果在执行中需要顺序,则需要以线程安全的方式执行。输出的顺序是不确定的,取决于您的体系结构、操作系统等。启动线程的成本相对较高,因此在大多数情况下,
main
消息是先打印的。您根本无法期望任何顺序,这是不保证的。如果在执行中需要顺序,则需要以线程安全的方式执行。输出顺序是不确定的,具体取决于您的体系结构、操作系统等。启动线程的成本相对较高,因此在大多数情况下,首先打印main
消息。