Содержание
- 2. ОСНОВНЫЕ ВОПРОСЫ Введение в многопоточность; Cоздание потоков; Потоки с параметрами; Синхронизация потоков; Мониторы; Класс AUTORESETEVENT; Мьютексы;
- 3. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD Одним из ключевых аспектов в современном программировании является многопоточность. Ключевым понятием
- 4. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD Образно многопоточность на базе потоков можно изобразить следующим образом:
- 5. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD Разумеется, необходимо знать особенности одновременного выполнения множества потоков. Из-за того, что
- 6. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD В приложении, которое функционирует на сервере, один поток всегда ожидает поступления
- 7. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD Различают две разновидности многозадачности: на основе процессов и на основе потоков.
- 8. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD Поток представляет собой координируемую единицу исполняемого кода. Своим происхождением этот термин
- 9. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD Главное преимущество многопоточной обработки заключается в том, что она позволяет писать
- 10. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD Поток может находиться в одном из нескольких состояний. В целом, поток
- 11. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD В связи с организацией многозадачности на основе потоков возникает потребность в
- 12. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD Основной функционал для использования потоков в приложении сосредоточен в пространстве имен
- 13. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD Основные свойства класса Thread: Статическое свойство CurrentContext позволяет получить контекст, в
- 14. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD Некоторые методы класса Thread: Статический метод GetDomain возвращает ссылку на домен
- 15. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD Получение информации о потоке Используем вышеописанные свойства и методы для получения
- 16. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD Статус потока Статусы потока содержатся в перечислении ThreadState: Aborted: поток остановлен,
- 17. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD В процессе работы потока его статус многократно может измениться под действием
- 18. ВВЕДЕНИЕ В МНОГОПОТОЧНОСТЬ. КЛАСС THREAD Приоритеты потоков Приоритеты потоков располагаются в перечислении ThreadPriority: Lowest BelowNormal Normal
- 19. СОЗДАНИЕ ПОТОКОВ. ДЕЛЕГАТ THREADSTART Используя класс Thread, мы можем выделить в приложении несколько потоков, которые будут
- 20. Здесь новый поток будет производить действия, определенные в методе Count. Чтобы запустить этот метод в качестве
- 21. Таким образом, в нашей программе будут работать одновременно главный поток, представленный методом Main, и второй поток.
- 22. СОЗДАНИЕ ПОТОКОВ. ДЕЛЕГАТ THREADSTART Существует еще одна форма создания потока: Thread myThread = new Thread(Count); Хотя
- 23. ПОТОКИ С ПАРАМЕТРАМИ И PARAMETERIZEDTHREADSTART В предыдущем примере мы рассмотрели, как запускать в отдельных потоках методы
- 24. После создания потока мы передаем метод myThread.Start(number); переменную, значение которой хотим передать в поток. При использовании
- 25. ПОТОКИ С ПАРАМЕТРАМИ И PARAMETERIZEDTHREADSTART Но что делать, если нам надо передать не один, а несколько
- 26. Сначала определяем специальный класс Counter, объект которого будет передаваться во второй поток, а в методе Main
- 27. ПОТОКИ С ПАРАМЕТРАМИ И PARAMETERIZEDTHREADSTART Для решения данной проблемы рекомендуется объявлять все используемые методы и переменные
- 29. СИНХРОНИЗАЦИЯ ПОТОКОВ Нередко в потоках используются некоторые разделяемые ресурсы, общие для всей программы. Это могут быть
- 30. Здесь у нас запускаются пять потоков, которые работают с общей переменной x. И мы предполагаем, что
- 31. СИНХРОНИЗАЦИЯ ПОТОКОВ Решение проблемы состоит в том, чтобы синхронизировать потоки и ограничить доступ к разделяемым ресурсам
- 32. Для блокировки с ключевым словом lock используется объект-заглушка, в данном случае это переменная locker. Когда выполнение
- 33. МОНИТОРЫ Наряду с оператором lock для синхронизации потоков мы можем использовать мониторы, представленные классом System.Threading.Monitor. Фактически
- 34. Метод Monitor.Enter блокирует объект locker так же, как это делает оператор lock. А в блоке try...finally
- 35. МОНИТОРЫ Кроме блокировки и разблокировки объекта класс Monitor имеет еще ряд методов, которые позволяют управлять синхронизацией
- 36. КЛАСС AUTORESETEVENT Класс AutoResetEvent также служит целям синхронизации потоков. Этот класс является оберткой над объектом ОС
- 37. Во-первых, создаем переменную типа AutoResetEvent. Передавая в конструктор значение true, мы тем самым указываем, что создаваемый
- 38. После завершения работы вызывается метод waitHandler.Set, который уведомляет все ожидающие потоки, что объект waitHandler снова находится
- 39. КЛАСС AUTORESETEVENT Но если бы мы написали AutoResetEvent waitHandler = new AutoResetEvent(false), тогда объект изначально был
- 40. МЬЮТЕКСЫ Еще один инструмент управления синхронизацией потоков представляет класс Mutex, также находящийся в пространстве имен System.Threading.
- 41. Сначала создаем объект мьютекса: Mutex mutexObj = new Mutex(). Основную работу по синхронизации выполняют методы WaitOne()
- 42. Таким образом, когда выполнение дойдет до вызова mutexObj.WaitOne(), поток будет ожидать, пока не освободится мьютекс. И
- 43. МЬЮТЕКСЫ Мы использовали мьютекс для синхронизации потоков. Однако замечательная черта мьютексов состоит также в том, что
- 44. В данном случае для создания мьютекса мы используем другую перегрузку конструктора. Значение true, которое передается в
- 45. Третий параметр возвращает значение из конструктора. Если он равен true, то это означает, что мьютекс запрошен
- 46. СЕМАФОРЫ Еще один инструмент, который предлагает нам платформа .NET для управления синхронизацией, представляют семафоры. Семафоры позволяют
- 47. В данной программе читатель представлен классом Reader. Он инкапсулирует всю функциональность, связанную с потоками, через переменную
- 48. Основной функционал сосредоточен в методе Read, который и выполняется в потоке. В начале для ожидания получения
- 50. ИСПОЛЬЗОВАНИЕ ТАЙМЕРОВ Одним из важнейших классов, находящихся в пространстве имени System.Threading, является класс Timer. Данный класс
- 51. Первым делом создается объект делегата TimerCallback, который в качестве параметра принимает метод. Причем данный метод должен
- 53. Скачать презентацию