Потоки | Threads

Потоки | Threads

Поток (Thread) – путь выполнения действий внутри исполняемого приложения.

Процесс может создавать один или более потоков для выполнения частей программного кода,связанного с процессом. Следует использовать делегат ThreadStart или ParameterizedThreadStart для задания программного кода, управляемого потоком. С помощью делегата ParameterizedThreadStart можно передавать данные в потоковую процедуру.

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

По умолчанию создаваемый поток становится приоритетным.

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

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

В случае использования нескольких потоков приходится координировать их действия. Такой процесс называется синхронизацией.

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

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

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

  • Ключевое слово lock вызывает Monitor.Enter() в начале блока и Monitor.Exit() в конце блока.

Запуск потока - асинхронный вызов метода.

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

results for ""

    No results matching ""