Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Основы синхронизации процессов и потоков
С возникновением мультипрограммирования появилась проблема синхронизации. Эта проблема связана с совместным использованием ресурсов компа разными процессами и потоками.
Средства синхронизации называются еще IPC – inter process communication – это средства межпроцессной коммуникации и межпроцессного обмена данными.
Выполнение потока в мультипрограммной среде всегда носит асинхронный характер – никогда нельзя предугадать, когда именно будет выполняться то или иное действие. Все потоки выполняются независимо и асинхронно друг по отношению к другу.
Но в ситуации, когда потокам нужно взаимодействовать между собой или использовать разделяемые ресурсы, потоки нужно синхронизировать.
Для синхронизации программист может использовать: - собственные средства (написать свою глобальную переменную, в которую заносить состояние синхронизируемого объекта) - воспользоваться готовыми средствами синхронизации ОС. ОС обычно предоставляет широкий спектр средств синхронизации, так что это предпочтительнее.
Средства ОС могут быть функционально специализированными: - для синхронизации потоков одного процесса - для синхронизации потоков разных процессов и тд.
Понятие гонок
Если пренебрегать синхронизацией, то может возникнуть ситуация гонок, что может привести к ошибкам в работе программы и даже к краху системы.
Пример ситуации гонок: База данных, хранящая инфу о заказах и оплате клиента. С БД работает 2 потока: один пишет инфу о заказах, второй об оплате.
Итак: 1) Работает поток А: сделал А1 и А2, считал инфу в буфер, но в файл пока ничего не сохранил, в файле нет инфы о заказе. 2) Работает поток Б: сделал Б1 и Б2, в его буфере нет ничего про заказ клиента (инфа о нем хранится в буфере потока А) 3) Поток А выполнилА3 и записал в файл свою информацию 4) Поток Б выполнил Б3 записал в файл свою устаревшую информацию, затерев ту, что была записана – инфа о заказе потеряна.
Сложность проблемы заключается в нерегулярности ее возникновения.
Гонки – это ситуация, когда 2 или более потоков обрабатывают разделяемые данные и результат работы зависит от соотношения скоростей потоков (кто успел – обогнал, тот и съел);
Критическая секция кода и исключение гонок Критическая секция – важное понятие синхронизации. Критическая секция – часть кода программы, результат которой может непредсказуемо меняться, если переменные этой части программы, изменяются другими потоками в то время как выполнение этой части еще не закончено.
Критическая секция всегда определяется по отношению к критическим данным – данным, при несогласовании которых могут возникнуть непредсказуемые эффекты.
Для исключения гонок необходимо, чтобы в каждый момент времени в критической секции кода находится только один поток, неважно, в активном или приостановленном состоянии.
Такой прием называется взаимным исключением. ОС использует разные способы реализации взаимного исключения, некоторые подходят только для потоков одного процесса, другие – для разных потоков.
Самый простой и плохой способ – запрет любых прерываний во время исполнения критической секции. Это плохо, т.к. нельзя доверять управление системой пользовательской программе, она может быть жадная – раз, и если она зависнет, то ляжет вся система.
Блокирующие переменные
Для синхронизации прогер может использовать глобальные блокирующие переменные. К ним имеют доступ все потоки и с ними программист работает, обращаясь к системным вызовам ОС.
Для каждого набора критических данных заводится своя двоичная переменная, которая устанавливается в 0, когда поток входит в КС, и в 1 – когда он ее покидает.
Блокирующие переменные могут быть использованы при работе с любыми разделяемыми ресурсами.
Но нельзя прерывать поток между выполнением проверки состояния переменной и установки ее значения. Для этого можно: - использовать встроенную в процессор единую команду анализа и присвоения значения логической переменной - а если такой нет, специальными системными примитивами запрещать в это время все прерывания.
Недостаток такой системы: Второй поток, который тоже хочет поработать с критической секцией кода, должен постоянно опрашивать переменную на предмет ее состояния.
В ОС Windows NT взаимное исключение реализовано похожим образом, но от этого недостатка избавились: при переводе второго жаждущего потока в ожидание делается отметка, что его нужно освободить после освобождения критической секции.
|
||||||
Последнее изменение этой страницы: 2017-02-05; просмотров: 256; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.150.80 (0.006 с.) |