1
namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread t = new Thread(() => WriteY("11"));
            t.Start();
            t.IsBackground = true;
            Thread.CurrentThread.Priority = ThreadPriority.Highest;
            for (int i = 0; i < 1000; i++) Console.Write("x");
            System.Console.ReadLine();
        }
        static void WriteY(string ss)
        {
            for (int i = 0; i < 1000; i++)
                Console.Write(ss);
            System.Console.ReadLine();
        }
    }
}

您好,我认为“x”线程应该首先完成,因为它的优先级最高。但结果是他们仍在切换。

4

2 回答 2

2

首先,无论优先级如何,您都不能对哪个并行作业先完成做出任何假设

另外,请阅读 Jeff Atwood 的这篇文章,了解为什么使用线程优先级是一个坏主意。

http://www.codinghorror.com/blog/2006/08/thread-priorities-are-evil.html

在 tl;dr 的情况下,只需引用一句话:无论您是多么出色的程序员,我几乎可以保证您无法超越在您的操作系统中编写调度程序的程序员

于 2013-08-05T07:25:49.597 回答
0

如果您的 PC 上有多个可用的 CPU(-core),这是“正常的”,因为线程 1 在 CPU/核心 1 上运行,线程 2 在 CPU/核心 2 上运行。
我想如果你用更多线程然后可用内核或在后台运行例如 Prime95 以使用 100% 的 CPU 它应该有所作为,但如果 <= 线程,则(可用)CPU/corse 调度程序将在其自己的内核上运行每个线程,并且(如果他们正在做〜同样的事情)他们将在同一时间完成......

于 2013-08-05T07:21:50.433 回答