线程同步——Monitor

作者:追风剑情 发布于:2017-9-22 17:01 分类:C#

示例
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace MonitorTest
  5. {
  6. class Program
  7. {
  8. private static object lock_obj = new object();
  9. static void Main(string[] args)
  10. {
  11. Thread myThread;
  12. for (int i = 0; i < 5; i++)
  13. {
  14. myThread = new Thread(new ThreadStart(MyThreadProc));
  15. myThread.Name = String.Format("Thread{0}", i + 1);
  16. myThread.Start();
  17. }
  18.  
  19. //等待一会确保最后创建的一条线程已经启动并执行到Wait
  20. Thread.Sleep(200);
  21. Monitor.Enter(lock_obj);
  22. Thread.Sleep(2000);
  23. Console.WriteLine("2秒后唤醒处于Wait中的所有线程");
  24. Monitor.PulseAll(lock_obj);//唤醒处于Wait中的所有线程
  25. //Monitor.Pulse(lock_obj);//唤醒处于Wait中的某条线程
  26. Monitor.Exit(lock_obj);
  27. Console.ReadKey();
  28. }
  29.  
  30. private static void MyThreadProc()
  31. {
  32. string name = Thread.CurrentThread.Name;
  33. //Monitor.Enter与Monitor.Exit之间的代码相当于lock(){}
  34.  
  35. Monitor.Enter(lock_obj);//开始线程同步,相当于lock(){}
  36. Console.WriteLine("{0} Thread Enter", name);
  37.  
  38. Console.WriteLine("{0} Wait...", name);
  39. Monitor.Wait(lock_obj);//阻塞当前线程
  40.  
  41. Console.WriteLine("{0} Thread Exit", name);
  42. Monitor.Exit(lock_obj);//结束线程同步
  43. }
  44. }
  45. }


运行测试

11111.png

官方文档 https://msdn.microsoft.com/zh-cn/library/system.threading.monitor(v=vs.110).aspx

标签: C#

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号