【问题标题】:Doesn't ThreadPriority.Highest guarantee finishing before ThreadPriority.Lowest?ThreadPriority.Highest 不保证在 ThreadPriority.Lowest 之前完成吗?
【发布时间】:2016-06-30 13:49:02
【问题描述】:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace ConsoleApplication58
{
class MultiThreading
{
    static void Main(string[] args)
    {
        MultiThreading mul = new MultiThreading();

        Thread t1 = new Thread(new ThreadStart(mul.WriteX));
        Thread t2 = new Thread(new ThreadStart(mul.WriteO));

        t1.Priority = ThreadPriority.Lowest;
        t2.Priority = ThreadPriority.Highest;

        t1.Start();
        t2.Start();

    }

    private void WriteX()
    {
        for (int i = 0; i < 300; i++)
        {
            Console.Write("X");
        }
    }

    private void WriteO()
    {
        for (int i = 0; i < 300; i++)
        {
            Console.Write("O");
        }
    }
}
}

当我执行上面的代码时,我希望 X 结束打印作业,因为我给该方法的优先级最低,但有时我会在最后得到 O。我的意思是不给第二个线程高优先级保证它会更快完成吗?

【问题讨论】:

  • 也许只有一个核心的 cpu,但祝你在现代计算机中找到一个核心

标签: c# multithreading thread-priority


【解决方案1】:

优先级设置引起的线程调度没有实际的保证。

例如,高优先级线程可能会阻塞 IO 或页面错误。然后,另一个线程可以执行。

这不是同步线程的好方法。

【讨论】:

    【解决方案2】:

    CPU 的三百次操作是秒的一部分。我建议您将您的问题和应用程序视为统计实验。

    多次重复您的实验,因为运行其中的一些是不可靠的。这是因为人口(迭代次数不够大)。我尝试运行这个应用程序几次,但迭代了 3 000 000 次,我让写了 45 秒(while(true) 和 Thread.Sleep(45000))。优先级较高的任务先完成。

    您的操作系统、CPU 和 PC 配置确实很重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 2020-01-09
      相关资源
      最近更新 更多