|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Семафоры
Семафор – объект синхронизации, задающий количество пользователей (процессов, потоков), имеющих одновременный доступ к некоторому ресурсу. С каждым семафором связаны счетчик (значение семафора) и очередь ожидания (процессов, потоков, ожидающих принятия счетчиком определенного значения). Различают: 1. Двоичные (Булевские) семафоры – это механизм взаимного исключения для защиты критичного разделяемого ресурса. Начальное значение счетчика такого семафора равно 1. 2. Счетные семафоры – это механизм взаимного исключения для защиты ресурса, который может быть одновременно использован не более чем ограниченным фиксированным числом процессов n. Начальное значение счетчика такого семафора равно n. Над семафорами определены следующие элементарные операции: 1. Взять k (k=1 для булевских семафоров) единиц из семафора. Т.е. уменьшить счетчик семафора на k. Если в счетчике нет k единиц, то эта операция переводит процесс в состояние ожидания наличия как минимум k единиц в семафоре и добавляет его в конец очереди ожидания этого семафора. 2. Вернуть k единиц в семафор. 3. Попробовать взять k единиц из семафора. Если в счетчике семафора k единиц, то взять их из него, если нет – вернуть признак занятости семафора без перевода процесса в состояние ожидания. 4. Проверить семафор – получить значение счетчика семафора. 5. Блокировать семафор – взять из него столько единиц, сколько в нем есть (две разновидности этой операции: взять столько сколько есть в данный момент; взять столько сколько есть в начальный момент). 6. Разблокировать семафор – вернуть столько единиц в счетчик, сколько всего было взято данным процессом по команде «блокировать». Особенно проста логическая структура двоичных семафоров. Счетчик семафора s инициализируется 1 при создании, для доступа к нему определены две примитивные операции: get(s) – взять семафор и put(s) – вернуть семафор (прибавить к счетчику единицу). Эти операции неделимы, т.е. переключение процессов во время их исполнения запрещено. Иногда рассматривают личные или приватные семафоры, такой семафор создается процессом П сразу в закрытом состоянии, при этом процесс П имеет право только вызывать функцию get, а все остальные задачи только функцию put. С помощью таких семафоров легко образовать обмен между процессами по типу клиент-сервер Пример: Процесс П1 (сервер) сразу после старта создает личный семафор s1 и вызывает функцию s1:Get (), т.е. тем самым она блокируется до освобождения семафора s1. Процесс П2 (клиент) сразу после старта создает личный семафор s2, подготавливает данные в разделяемой с процессом П1 памяти и вызывает функцию s1:Put (), далее процесс П2 продолжает работу и вызывает функцию s2: Get (), тем самым блокируясь до освобождения семафора s2. Процесс П1 активизируется и по окончании обработки данных вызывает функции s2: Put (), а затем s1 Get (), активизируя процесс П2 и блокируя себя. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.002 сек.) |