【发布时间】:2014-08-15 20:12:07
【问题描述】:
我是 C# 中多线程的新手。我创建了以下程序:
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);
}
}
输出是
来自 main 的你好
工人问好
如果我将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 线程之间切换执行,因此输出。有人可以澄清/否定我的假设吗?
【问题讨论】:
-
您不能指望任何订单,不能保证。如果您需要执行顺序,则需要以线程安全的方式进行
-
输出的顺序是不确定的,取决于你的架构,操作系统等。启动一个线程是相对昂贵的,因此在大多数情况下
main消息首先打印。
标签: c# multithreading