线程:线程优先级
本文关键字:线程 优先级 | 更新日期: 2024-11-06 12:15:21
在下面的程序中,我创建了 2 个具有不同优先级的线程。
t1.Priority = ThreadPriority.Lowest;
t2.Priority = ThreadPriority.Highest;
t1 refers to method even();
t2 refers to method odd();
方法 even() 在方法 odd() 之前首先调用,尽管线程 t2 具有最高优先级。我只是想确保如何实时使用线程优先级。 此处不按优先级顺序调用函数。
班级检查 :
class check
{
public void even()
{
Monitor.Enter(this);
Console.WriteLine("Child thread 1 begins");
for (int i = 0; i <= 10; i = i + 2)
{
Thread.Sleep(3000);
Console.WriteLine(i);
}
Console.WriteLine("Child thread 1 ends");
Monitor.Exit(this);
}
public void odd()
{
Monitor.Enter(this);
Console.WriteLine("Child thread 2 begins");
for (int i = 1; i <= 10; i = i + 2)
{
Console.WriteLine(i);
}
Console.WriteLine("Child thread 2 ends");
Monitor.Exit(this);
}
}
班级程序:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main thread begins");
check c = new check();
ThreadStart ts1 = new ThreadStart(c.even);
ThreadStart ts2 = new ThreadStart(c.odd);
Thread t1 = new Thread(ts1);
Thread t2 = new Thread(ts2);
t1.Priority = ThreadPriority.Lowest;
t2.Priority = ThreadPriority.Highest;
t1.Start(); -> Here no guarantee that odd() associated with t1
will be executed only after even() associated with
thread t2 based on priority.
t2.Start();
Console.WriteLine("Main thread ends");
Console.Read();
}
}
线程优先级用于确定当多个线程可供运行时要运行哪个线程,并且调度程序必须决定接下来要运行哪个线程。这并不意味着优先级较高的线程将在优先级较低的线程开始之前运行完成。
在您的代码中,您在 t2 之前启动 t1,因此您希望 t1 首先运行。调度程序不会坐等主例程结束,然后再决定运行什么。一旦 t1 启动,那么可能有一个可用的免费内核,因此它会立即运行它。
Windows不是实时操作系统,因此您将永远无法完全实时地使其工作。