Потоки ч.1

Приветствую всех, сегодня хочу поговорить о потоках. Их применение, рассмотрим методы класса Thread. Вообще это тема очень большая и сложная, потому я ее разделю на не сколько частей.

Многозадачность — свойство операционной системы или среды программирования обеспечивать возможность параллельной (или псевдопараллельной) обработки нескольких процессов. Позволяет выполнять одновременно более одной программы.

При использовании многозадачности на основе процессов, программа является наименьшей единицей кода, выполнение которой может контролировать планировщик задач.

У каждого процесса может быть один или более потоков. Это означает, что процесс может решать более одной задачи одновременно. Многозадачность на основе потоков означает параллельное выполнение отдельных частей программы.

System.Threading — пространство имен для работы с потоками, содержит классы для управления потоками, такие как:
Thread, ThreadStart, ParameterizedThreadStart, Monitor.

Класс Thread , представляет собой поток. Он позволяет создавать новые потоки, управлять приоритетом потоков и получать информацию о всех потоках, существующих в рамках
приложения.

Делегат ThreadStart представляет метод, который выполняется в указанном потоке Thread.

ThreadStart — не позволяет передавать данные в поток.

Делегат ParameterizedThreadStart представляет метод, который выполняется в указанном потоке Thread. Данные делегат позволяет нам передать параметры в поток необходимые в методе. Однако параметр в методе должен принимать их упакованными в object.

Существуют две разновидности потоков: приоритетный и фоновый. Отличие между ними заключается в том, что процесс не завершится до тех пор, пока не окончится приоритетный поток, тогда как фоновые потоки завершаются автоматически после окончания всех приоритетных потоков.

По умолчанию создаваемый поток становится приоритетным. Для того чтобы сделать поток фоновым, достаточно присвоить логическое значение true свойству IsBackground.
Логическое значение false указывает на то, что поток является приоритетным.

Синхронизация потоков:

В случае использования нескольких потоков приходится координировать их действия, такой процесс называется синхронизацией. Основная причина применения синхронизации — необходимость разделять среди двух или более потоков общий ресурс (разделяемый ресурс), который может быть одновременно доступен только одному потоку.

Синхронный поток – Это поток запущенный в контексте первичного потока.

Асинхронный поток – это поток запущенный в контексте вторичного потока, относительно текущего.

Ключевое слово lock не позволит одному потоку войти в важный раздел кода в тот момент, когда в нем находится другой поток. При попытке входа другого потока в
заблокированный код потребуется дождаться снятия блокировки объекта.

Класс Monitor представляет собой механизм для синхронизации доступа к объектам. Класс Monitor используется для создания критических секций.

Однако о по сути выполняет тужу функцию что и lock, в своих приложениях все же  стоит отдавать предпочтение именно lock.

Есть еще одна возможность синхронизации это использование атрибута MethodImplAttribute

Следующий пример демонстрирует его работу.

 

Читать Потоки ч.2

Обновлено: 05.07.2018 — 14:36

2 комментария

Оставить комментарий
  1. AnnaLudvigovna

    Очень интересно! Спасибо!

  2. Hello, thanks!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.