查看: 11|回复: 0

C#线程优先级与状态管理Monitor.Wait和Monitor.Pulse

[复制链接]

272

主题

1

回帖

1413

积分

管理员

积分
1413
QQ
发表于 2025-9-12 08:08:14 | 显示全部楼层 |阅读模式
  1. internal class Program
  2. {
  3.      static void Main(string[] args)
  4.      {
  5.          Demo01();
  6.          Console.ReadLine();
  7.      }

  8.      static object _lock = new object();
  9.      static bool _running;
  10.      static void Demo01()
  11.      {
  12.          Console.WriteLine($"当前进程优先级:{Process.GetCurrentProcess().PriorityClass}");

  13.          var lowthread = new Thread(() =>
  14.          {
  15.              Console.WriteLine($"低优先级的任务启动:{Thread.CurrentThread.ManagedThreadId}");
  16.              lock (_lock)
  17.              {
  18.                  var oldPri = Thread.CurrentThread.Priority;
  19.                  Thread.CurrentThread.Priority = ThreadPriority.Highest;

  20.                  Thread.Sleep(10);
  21.    
  22.                  Console.WriteLine("低优先级释放锁");
  23.                  Thread.CurrentThread.Priority = oldPri;
  24.              }
  25.          })
  26.          {
  27.              Priority = ThreadPriority.Lowest
  28.          };

  29.          var highthread = new Thread(() =>
  30.          {
  31.              Console.WriteLine($"高优先级的任务启动:{Thread.CurrentThread.ManagedThreadId}");
  32.              var stopwatch = Stopwatch.StartNew();
  33.              lock (_lock)
  34.              {
  35.                  stopwatch.Stop();
  36.                  Console.WriteLine($"高优先级活动锁,等待了{stopwatch.ElapsedMilliseconds}ms, 开始执行任务");               
  37.              }
  38.          })
  39.          {
  40.              Priority = ThreadPriority.Highest
  41.          };

  42.          var middlethread = new Thread(() =>
  43.          {
  44.              Console.WriteLine($"中优先级的任务启动:{Thread.CurrentThread.ManagedThreadId}");
  45.              while(!_running)
  46.              {
  47.                  for (int i = 0; i < 100000; i++)
  48.                  {
  49.                      Math.Sqrt(i);
  50.                  }
  51.              }
  52.          })
  53.          {
  54.              Priority = ThreadPriority.AboveNormal
  55.          };

  56.          lowthread.Start();
  57.          Thread.Sleep(100);

  58.          highthread.Start();
  59.          middlethread.Start();

  60.          highthread.Join();
  61.          lock (_lock)
  62.          {
  63.              Monitor.Pulse(_lock);
  64.          }
  65.          _running = true;

  66.          middlethread.Join();
  67.         lowthread.Join();

  68.          Console.WriteLine("结束");
  69.      }

  70.      static object obj = new object();
  71.      static void Demo02()
  72.      {
  73.          for(int i=0; i < 6; i++)
  74.          {
  75.              Thread thread = new Thread(() =>
  76.              {
  77.                  LockMethod();
  78.              })
  79.              { Name = $"线程{i}" };
  80.              thread.Start();
  81.          }

  82.          Thread.Sleep(10000);

  83.          PulseMethod();
  84.      }

  85.      public static void LockMethod()
  86.      {
  87.          Console.WriteLine(Thread.CurrentThread.Name + "将要进入lock");

  88.          lock(obj)
  89.          {
  90.              Console.WriteLine(Thread.CurrentThread.Name + "进入lock");
  91.         
  92.              Thread.Sleep(1000);
  93.              Monitor.Wait(obj);
  94.              Console.WriteLine(Thread.CurrentThread.Name + "退出lock");
  95.          }
  96.      }

  97.      public static void PulseMethod()
  98.      {
  99.          lock(obj)
  100.          {
  101.              Monitor.Pulse(obj);
  102.             // Monitor.PulseAll(obj);
  103.          }
  104.      }
  105. }
复制代码
1.png

参考链接:https://www.dongchuanmin.com/csharp/2889.html


高级模式
B Color Image Link Quote Code Smilies

本版积分规则

关于我们

企业文化

人才招聘

常见问题

建议反馈

合作伙伴

商务合作

新闻媒体

产品服务

客户案例

联系我们

联系电话:14776878570(同VX号)

邮箱:14776878570@163.com(同VX号)

工作时间:周一至周六(早上8点至下午10点)

关注微信公众号

QQ|Archiver|手机版|小黑屋|鸿翔机器人

GMT+8, 2025-9-22 06:18 , Processed in 0.069237 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.