русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Объектов синхронизации.


Дата добавления: 2013-12-23; просмотров: 936; Нарушение авторских прав


Синхронизация.

Впервые появилась в W32. Синхронизация – это средство, позволяющее реализовать вытесняющую многозадачность, то есть реализовать переключение программ в любой момент времени. Синхронизация может выполняться в пользовательском режиме: критические секции и функции Interlocked.

В режиме ядра для синхронизации используются следующие объекты: события, семафоры, мьютексы.

В Windows 2000 появился новый объект – ожидающий таймер.

Cинхронизация может выполняться с помощью таких объектов ядра, как процессы, потоки, задания, файлы. Оповещение об изменениях файловой системы, CON ввод/вывод. Синхронизация используется для единоличного доступа к ресурсам и для оповещения о каких-либо событиях, например, когда необходима синхронизация – это работа с базой данных. В тот момент когда происходит запись, то другие операции должны быть заблокированы.

Пример, для оповещения событий. Процесс состоит из двух потоков.

Поток 1 считывает данные с файда, поток 2 выводит на экран. Естественно поток 2 ожидает выполнение потока 1.

Синхронизация потоков без использования

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

 

       
   
 

 


нет

 
 

 


да

 
 

 

 


 

 

Существуют проблемы.

1. Первый поток никогда не впадает в «спячку». Он тратит время процессора на проверки.

2. Булева переменная f никогда не примет значения true.

Вывод: синхронизация необходима.

 

 

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

1. Объекты синхронизации могут находится в двух состояниях.

1) signaled – свободен

2) non-signaled – занят



 

2. Если состояние свободное, то работа потока разрешена, если в занятом, то запрещена. Для созда-ния объектов синхронизации используются функции типа

CreateMutex(…) (тот кто открывает, тот и закрывает, нет счётчика),

CreateSemaphore(…) (есть счётчик),

CreateEvent(…).

Они возвращают дескриптор (указатель) на созданный объект.

3. Для перехода объектов синхронизации в свободное состояние используются функции типа

ReleaseMutex(…),

ReleaseSemaphore(…),

ReleaseEvent(…).

4. Для ожидания освобождения события используются функции

WaitForSingleObject(…) – ожидает освобождение какого-либо одного объекта. В качестве пара-метров передаётся дескриптор объекта, время ожидания.

WaitForMultipleObject(…) – ожидает освобождения нескольких объектов. В качестве параметров выступают указатель на массив дескрипторов, количество ожидаемых объектов, время ожидания и тип ожидания (все объекты или хотя бы один объект).

 

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

 

CreateMutex(…);

WaitForSingleObject(…);

ОС анализирует, в каком состоянии находится объект синхронизации. Если объект синхронизации находится в состоянии non-signaled, то ОС прекращает выполнение этого потока.

// Обработка базы данных.

Если объект занят, то обработка не будет происходить.

ReleaseMutex(…)

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

 



<== предыдущая лекция | следующая лекция ==>
Мультипроцессорной системой (SMP). | Синхронизация объектов.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.