并# 39;t ThreadPriority.最高保证在threadpriority之前完成

本文关键字:threadpriority 高保证 ThreadPriority | 更新日期: 2023-09-27 17:53:54

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。我的意思是,给第二个线程高优先级不是保证它会更快完成吗?

并# 39;t ThreadPriority.最高保证在threadpriority之前完成

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

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

这不是同步线程的好方法

CPU的三百次操作是second的一部分。我建议你把你的问题和应用看作一个统计实验。

重复你的实验多次,因为只进行少量实验是不可靠的。这是因为人口(迭代次数)不够大。我试着运行这个应用程序几次,但是有300万次迭代,我让它写45秒(while(true)和Thread.Sleep(45000))。优先级高的任务先完成。

你的操作系统,CPU和PC配置很重要。