C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 84 - Откуда взялась теория синхронизации / MSDN rus / Visual C++

Шаг 84 - Откуда взялась теория синхронизации

Кто придумал семафоры, критические секции и исключения ? Придумал их голландский профессор математик Эдсжер Дейкстра (Edsger Wybe Dijkstra) в начале 70 годов (1965-1973).

84.jpg (21955 b)

Рассматривая ситуации с многопользовательским доступом он ввел понятие критический интервал (critical section) . Под критическим интервалом он определил всякую последовательность шагов обработки, в которой последовательный процесс не должен прерываться ни каким другим процессом. Он сопоставил каждому, общему для некоторых процессов, набору данных некоторую запирающую переменную (mutex). Начальное значение которой равно 1. Если к началу критического интервала она больше или равна 1, то интервал должен выполняться, иначе ждать. Вот такой он алгоритм составил (синтаксис С, в оригинале PASCAL).

Mutex=1;

В начале критического интервала.

mutex=mutex-1;
if (mutex<0) 
{
	// жди;
} else {
	//выполняй;
};

В конце критического интервала.

mutex=mutex+1;
if (mutex<=0) 
{
	//возьми из очереди очередной процесс и выполняй его
} else {
	// все, никого нет
};

Во время критического интервала значение mutex равно нулю или отрицательному числу. Абсолютное значение его равно длине очереди. Чтобы лучше понять эти идеи нужно смотреть не со стороны программы, а со стороны операционной системы. Этот алгоритм именно для нее. Только когда два потока обратятся к критической секции в очереди станет 1 (mod(-1)). И когда значение станет 1 тогда ни один поток не находится в критической секции. Для синхронизации со стороны программы было введено понятие семафор, который просто разрешал или запрещал обращаться потоку. Вот эту синхронизацию и назвали синхронизацией запираний или взаимным исключением (mutual exclusion - mutex). Вследствие ошибок при программировании синхронных событий могут возникать системные заторы (system-deadlock) или мертвые хватки (deadly embrace).

Естественно это очень краткое изложение. К сожалению книг Дейкстра у меня нет :-(.

P.S.: Термины и изложения из учебника информатики Мюнхенского технологического университета 1973 год.


| |
Автор Каев Артем.
[AD]