Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Бип из системно... 65535
Пример работы с... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
21 ошибка прогр... 65535
Гостевая книга ... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Содержание сайт... 65535
Invision Power ... 65535
Программируемая... 65535
Оператор выбора... 65535
Модуль Forms 65535
Реклама
Сейчас на сайте
Гостей: 2
На сайте нет зарегистрированных пользователей

Пользователей: 13,152
новичок: Chavo
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Принадлежит ли точка пересечению двух окружностей на Turbo Pascal + Отче...
Моделирование станции технического обслуживания на GPSS + Отчет
Диплом - база данных поставщиков на Delphi (MS Sql Server)+ Пояснительна...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Возникновение взаимной блокировки при применении простых объектов синхронизации
Иногда возникают ситуации, при которых порядок блокировки требуется изменить. Представьте буферный кэш, который обслуживается при помощи двунаправленного связанного списка дисковых буферов.


Также может иметь смысл заглянуть на сайт air-ambulance.ru, ведь именно там можно узнать много нового на тему http://www.air-ambulance.ru/#!contact/crdp. Тема неотложка москва может показаться на первый взгляд незначительной и даже не тематичной. Но стоит посетить сайт air-ambulance.ru, и тема неотложка москва начинает проявлять себя с неожиданной стороны и вызывает всё больший интерес. Дело в том, что тема неотложка москва очень подробно представлена на сайте air-ambulance.ru. Трудно найти более детальное освещение темы неотложка москва чем это сделано на сайте air-ambulance.ru. Спасибо сайту air-ambulance.ru за такое доскональное преподнесение темы неотложка москва.


Список отсортирован в порядке «наиболее давно использовавшихся» (least recently used, LRU) элементов. Все буферы, не используемые в текущий момент времени, занесены в этот список. Защита заголовка очереди, а также указателей на предыдущий и последующий элементы поддерживается при помощи единственного объекта блокировки. Каждый буфер в отдельности использует еще один объект для защиты другой информации, содержащейся внутри буфера. Такой объект необходимо удерживать во время использования буфера.



Если нити необходимо загрузить один из дисковых блоков, сначала она запрашивает буфер (используя для этого хэширование или другие указатели), после чего блокирует его. Затем нить блокирует список LRU для удаления из него полученного блока. Следовательно, обычный порядок блокировки можно описать фразой: «сначала буфер, затем — список».



В некоторых случаях нити нужно получить любой свободный буфер, для чего она обращается к заголовку списка LRU. При этом нить сначала блокирует список и только затем блокирует буфер, оказавшийся в списке первым, после чего удаляет его из списка. Этот случай демонстрирует изменение порядка блокировка на противоположный: нить сначала блокирует список и только затем — буфер.


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



Для предупреждения возникновения подобных ситуаций ядро системы использует методику вероятностной блокировки. Если нить пытается получить объект синхронизации в нарушение иерархии, она использует функцию try_lock() вместо lock(). Операция try_lock() применяется для получения объекта, но результатом ее работы в случае обнаружения занятости объекта окажется не блокировка нити, а выход с ошибкой. В приведенном выше примере нить, которой необходимо получить любой свободный буфер, сначала заблокирует список, а затем будет пытаться получить первый свободный объект при помощи операции try_lock(), перемещаясь по списку. Листинг 7.10 показывает пример применения функции try_lock() над простыми объектами синхронизации.
Рекурсивная блокировка



Блокировка называется рекурсивной, если попытка захвата объекта, которым уже обладает нить, окажется успешной и не повлечет приостановку ее выполнения. В каких случаях можно использовать эту возможность? В каких ситуациях нить пытается запросить объект, которым она уже обладает? Обычно такое происходит, если нить, удерживающая ресурс, вызывает процедуру низкого уровня, производящую какие-либо операции с этим ресурсом1. Процедуры могут быть вызваны и другими командами высшего уровня, не занявшими перед этим ресурс. Становится ясно: процедура низкого уровня может попросту не знать о том, что ресурс является заблокированным. Если процедура попытается произвести блокировку, результатом станет зависание процесса.
Опубликовал katy Июль 06 2015 21:00:44 · 0 Комментариев · 1895 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
ICQ
Самоучитель PHP 5...
AID антивирус
Просмотр файлов и...
PBEditPack
Игра "Астероиды" ...
TsHintManager
Atb
Упорядоченный дин...
Разработка клиент...
Отключение и вклю...
Длинный заголовок...
Язык программиров...
Delphi 7 Enterpri...
Иллюстрированный ...
База для Allsubmi...
Паскаль и Дельфи....
ComboBox97
Tank [Исходник на...
AlnComponents

Топ загрузок
Приложение Клие... 100682
Delphi 7 Enterp... 95268
Converter AMR<-... 20187
GPSS World Stud... 16686
Borland C++Buil... 13901
Borland Delphi ... 9711
Turbo Pascal fo... 7229
Калькулятор [Ис... 5596
Visual Studio 2... 5127
FreeSMS v1.3.1 3621
Случайные статьи
Константы по умолч...
Группировка и разг...
Обмен универсальны...
Счетчики импульсов
Клавиатура и мышь
Политика хранения ...
СУБД mySQL
Домашний театр на ...
Центральный процессор
Приемы проверочных...
Распределенные сис...
Проектирование алг...
Как закрепить на э...
Функция скачки фай...
name(А,L)
GUNZIP
Создание XHTML-при...
Рассказывайте людя...
Игровой автомат Se...
Вулкан игровые авт...
на 90%
Алгоритм нахождени...
Казино Parimatch
Структура экспертн...
Описание языков за...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?