C# 为什么线程不按优先级运行
我在这个程序中有一个问题,我想根据优先级运行线程,但当我运行这个程序时,输出是 say hello say byeC# 为什么线程不按优先级运行,c#,multithreading,C#,Multithreading,我在这个程序中有一个问题,我想根据优先级运行线程,但当我运行这个程序时,输出是 say hello say bye 当准备运行的线程多于处理器时,系统使用线程优先级来决定运行哪个线程。在这种情况下,优先级较高的线程首先运行 在您的情况下,以下两种情况都是合理的: 在高优先级线程准备运行之前,低优先级线程已经启动,或者 您有足够的处理器,两个线程可以同时运行 线程优先级不是可用于确保执行顺序的工具。为此,您需要使用线程同步对象 通常,很少设置线程的优先级。通常,最好让操作系统决定如何调度线程 在t
当准备运行的线程多于处理器时,系统使用线程优先级来决定运行哪个线程。在这种情况下,优先级较高的线程首先运行 在您的情况下,以下两种情况都是合理的:
通常,很少设置线程的优先级。通常,最好让操作系统决定如何调度线程 在th之后启动th1可能会:
th1.Start();
th.Start()
但是仍然没有保证,您需要阻塞直到完成,这就引出了为什么要使用线程的问题
Sayhello();
Saybye();
如果必须,您需要在打招呼时发出信号,以便再见继续:
private ManualResetEvent waitHandel;
public void Sayhello()
{
Console.WriteLine("say hello");
waitHandel.Set();
}
public void Saybye()
{
waitHandel.WaitOne();
Console.WriteLine("say bye");
}
static void Main(string[] args)
{
waitHandel = new ManualResetEvent(false);
Thread th = new Thread(new ThreadStart(ob.Sayhello));
th.Priority = ThreadPriority.Lowest;
th.Start();
Thread th1 = new Thread(new ThreadStart(ob.Saybye));
th1.Priority = ThreadPriority.Highest;
th1.Start();
Console.ReadLine();
}
非常确定第一个线程在第二个线程创建之前就已经完成了。我想你可以在这里找到一个合适的答案:我通常不会这么直截了当,但是。。。如果你真的不知道自己在做什么,那就别管线程优先级了。它不是一个简单的设置,让你控制线程如何执行,它是一个非常复杂的机制,专为极端情况而设计,而不是日常使用。也许你应该重新提出你的问题,询问如何解决你的实际问题,而不是尝试一个没有多大意义的场景。
Sayhello();
Saybye();
private ManualResetEvent waitHandel;
public void Sayhello()
{
Console.WriteLine("say hello");
waitHandel.Set();
}
public void Saybye()
{
waitHandel.WaitOne();
Console.WriteLine("say bye");
}
static void Main(string[] args)
{
waitHandel = new ManualResetEvent(false);
Thread th = new Thread(new ThreadStart(ob.Sayhello));
th.Priority = ThreadPriority.Lowest;
th.Start();
Thread th1 = new Thread(new ThreadStart(ob.Saybye));
th1.Priority = ThreadPriority.Highest;
th1.Start();
Console.ReadLine();
}