Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.50 KB | None | 0 0
  1. 1. Поток можно заблокировать, попытатьяс с ним работать.
  2. Такой поток не блокирует чуиже ресурсы, но далеко не все потоки болкируют ресурсы
  3. Заглушка
  4.  
  5. var lo = new object();
  6. поток не должен блокировать ресурсы, тогда:
  7. if (Monitor.TryEnter(lo))
  8. {
  9.     try
  10.     {
  11.         // нет catch, т.к плевать на ошибки
  12.     }
  13.     finally
  14.     {
  15.         monitor.Exit(lo);
  16.     }
  17. }
  18. else
  19. {
  20. }
  21. }
  22.  
  23. Поток может заблочирь ресурсы на долго, поэтому есть два метода:
  24. wait и pulse
  25. wait снимает блокировку объекта, позволяет другим
  26. потокам заблокировать объект
  27. pulse переводит все потоки в состояние готовности
  28. блокировать объект
  29.  
  30. wait(число милисекунд) - через это время этот объект будет
  31. заного заблокирован
  32.  
  33. class FS
  34. {
  35.     object lo = new object(); // блокируемый объект
  36.     public void first(bool Run)
  37.     {
  38.     // метод блокирует объект, если lo заблокирован, то
  39.     // вызывает pulse, в ином случае сообщает, что находится
  40.     // в потоке
  41.    
  42.         lock (lo)
  43.         {
  44.             if (!Run)
  45.             {
  46.                 Monitor.Pulse(lo);
  47.                 return;
  48.             }
  49.             Console.WriteLine("i'm first");
  50.             Monitor.Pulse(lo); // в этот момент будет запущен
  51.             // след поток, метод будет ожидать блокировки епотока
  52.             Monitor.Wait(lo);
  53.         }
  54.     }
  55.    
  56.     public void second(bool Run)
  57.     {
  58.      // второй поток, все также, кроме одной части: выводим "i'm second"
  59.     }
  60. }
  61.  
  62. теперь реализуем сам поток
  63. class NewThread
  64. {
  65.     // огранизуем здесь поток
  66.     public Thread Myth;
  67.     FS Fso;
  68.    
  69.     // нужен конструктор, что будет создавать
  70.     public NewThread(string name, FS FSo)
  71.     // передаю имя потока и экземпляр класса с методами,
  72.     // что буду вып
  73.     {
  74.         Myth = new Thread(this.Run)
  75.         this.FSo = FSo;
  76.         Myth.Name = name;
  77.         Myth.Start();
  78.     }
  79.    
  80.     void Run()
  81.     {
  82.     // открыт первый поток first, то тогда делаем след:
  83.         if (myth.Name = "first")
  84.         {
  85.                
  86.         }
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement