Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1. Поток можно заблокировать, попытатьяс с ним работать.
- Такой поток не блокирует чуиже ресурсы, но далеко не все потоки болкируют ресурсы
- Заглушка
- var lo = new object();
- поток не должен блокировать ресурсы, тогда:
- if (Monitor.TryEnter(lo))
- {
- try
- {
- // нет catch, т.к плевать на ошибки
- }
- finally
- {
- monitor.Exit(lo);
- }
- }
- else
- {
- }
- }
- Поток может заблочирь ресурсы на долго, поэтому есть два метода:
- wait и pulse
- wait снимает блокировку объекта, позволяет другим
- потокам заблокировать объект
- pulse переводит все потоки в состояние готовности
- блокировать объект
- wait(число милисекунд) - через это время этот объект будет
- заного заблокирован
- class FS
- {
- object lo = new object(); // блокируемый объект
- public void first(bool Run)
- {
- // метод блокирует объект, если lo заблокирован, то
- // вызывает pulse, в ином случае сообщает, что находится
- // в потоке
- lock (lo)
- {
- if (!Run)
- {
- Monitor.Pulse(lo);
- return;
- }
- Console.WriteLine("i'm first");
- Monitor.Pulse(lo); // в этот момент будет запущен
- // след поток, метод будет ожидать блокировки епотока
- Monitor.Wait(lo);
- }
- }
- public void second(bool Run)
- {
- // второй поток, все также, кроме одной части: выводим "i'm second"
- }
- }
- теперь реализуем сам поток
- class NewThread
- {
- // огранизуем здесь поток
- public Thread Myth;
- FS Fso;
- // нужен конструктор, что будет создавать
- public NewThread(string name, FS FSo)
- // передаю имя потока и экземпляр класса с методами,
- // что буду вып
- {
- Myth = new Thread(this.Run)
- this.FSo = FSo;
- Myth.Name = name;
- Myth.Start();
- }
- void Run()
- {
- // открыт первый поток first, то тогда делаем след:
- if (myth.Name = "first")
- {
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement