ThreadPriority.Highest 不保证在 ThreadPriority.Lowest 之前完成吗?
Doesn't ThreadPriority.Highest guarantee finishing before ThreadPriority.Lowest?
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。我的意思是不给第二个线程高优先级保证它会更快完成?
优先级设置引起的线程调度没有实际保证。
例如,高优先级线程可能会因 IO 或页面错误而阻塞。然后,另一个线程可以执行。
这不是同步线程的好方法。
CPU 的三百次操作是秒的一部分。我建议您将您的问题和应用程序视为统计实验。
多次重复你的实验,因为运行其中少数不可信。发生这种情况是因为人口(迭代次数不够大)。我尝试 运行 这个应用程序几次,但是有 3 000 000 次迭代,我让写了 45 秒(while(true) 和 Thread.Sleep(45000))。优先级高的任务先完成。
您的 OS、CPU 和 PC 配置确实很重要。
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。我的意思是不给第二个线程高优先级保证它会更快完成?
优先级设置引起的线程调度没有实际保证。
例如,高优先级线程可能会因 IO 或页面错误而阻塞。然后,另一个线程可以执行。
这不是同步线程的好方法。
CPU 的三百次操作是秒的一部分。我建议您将您的问题和应用程序视为统计实验。
多次重复你的实验,因为运行其中少数不可信。发生这种情况是因为人口(迭代次数不够大)。我尝试 运行 这个应用程序几次,但是有 3 000 000 次迭代,我让写了 45 秒(while(true) 和 Thread.Sleep(45000))。优先级高的任务先完成。
您的 OS、CPU 和 PC 配置确实很重要。