Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Монитор (синхронизация)30 марта 2011Оглавление: 1. Монитор (синхронизация) 2. Условные переменные 3. История в языках программирования, высокоуровневый механизм взаимодействия и синхронизации процессов, обеспечивающий доступ к неразделяемым ресурсам. Подход к синхронизации двух или более компьютерных задач, использующих общий ресурс, обычно аппаратуру или набор переменных. При многозадачности, основанной на мониторах, компилятор или интерпретатор прозрачно для программиста вставляет код блокировки-разблокировки в соответствующим образом оформленные процедуры, избавляя программиста от явного обращения к примитивам синхронизации. Изобретён Пером Бринчем Хансеном, впервые воплощён в языке Concurrent Pascal и использован для структурирования межпроцессного взаимодействия в операционной системе Solo. ВзаимоисключительностьМонитор состоит из:
Процедура монитора захватывает мьютекс перед началом работы и держит его или до выхода из процедуры, или до момента ожидания условия. Если каждая процедура гарантирует, что перед освобождением мьютекса инвариант истиннен, то никакая задача не может получить ресурс в состоянии, ведущем к гонке. Простой пример. Рассмотрим монитор, выполняющий транзакции банковского счёта. monitor account { int balance := 0 function withdraw { if amount < 0 then error "Счёт не может быть отрицательным" else if balance < amount then error "Недостаток средств" else balance := balance - amount } function deposit { if amount < 0 then error "Счёт не может быть отрицательным" else balance := balance + amount } } Инвариант здесь просто утверждает, что баланс должен отразить все прошедшие операции до того, как начнётся новая операция. Обычно это не выражено в коде, но подразумевается и может быть упомянуто в комментариях. Однако, есть языки программирования, такие как Эйфель или D, которые могут проверять инварианты. Блокировка добавлена компилятором. Это делает мониторы безопаснее и удобнее, чем другие подходы, требующие от программиста вручную добавлять операции блокировки-разблокировки, поскольку программист может забыть добавить их. Просмотров: 3582
|