Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 345; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.115 (0.006 с.) |