Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2010, 20:46   #1
NYH
Новичок
Джуниор
 
Регистрация: 29.11.2010
Сообщений: 1
По умолчанию Узкий мост

Помогите пожалуйста осуществить решение задачи по Теории Вычислительных Процессов на С/C++

«Узкий мост»
К узкому мосту приезжают машины с Севера и Юга. Машины, движущиеся в одном направлении могут переезжать мост одновременно, а в противоположных нет. Разработайте решение этой задачи с механизмом синхронизации СЕМАФОР. Измените решение так, чтобы любая машина, подъехавшая к мосту, в конце концов, через него переехала.

Теоретические сведения о Семафоре:

Объектами синхронизации называются объекты Windows, идентификаторы которых могут использоваться в функциях синхронизации. Среди них есть как объекты, использующиеся только для синхронизации, так и объекты, которые используются в других целях, но могут вызывать срабатывание функций ожидания. Рассмотрим объект Семафор, использующийся только для синхронизации.
Семафором называется объект ядра, который позволяет только одному процессу или одному потоку процесса обратиться к критической секции – блоку кодов, осуществляющему доступ к объекту.
Серверы баз данных используют их для защиты разделяемых данных.
Классический семафор был создан Э. Дейкстрой, который описал его в виде объекта, обеспечивающего выполнение двух операций Р и V:
P – сокращение голландского слова Proberen, что означает тестирование;
V – сокращение глагола Verhogen, что означает приращивать (increment).
Различают два основных использования семафоров: защита критической секции и обеспечение совместного доступа к ресурсу.
Примеры использования семафоров:
- критическая секция в виде функции, осуществляющей доступ к таблице базы данных;
- реализация списка операционной системы, который называется process control blocks (PCBs). Это список указателей на активные процессы. В каждый конкретный момент времени только один поток ядра системы может изменять этот список, иначе будет нарушена семантика его использования;
- управление перемещением данных (data flow) между n производителями и m потребителями. Существует много систем, имеющих архитектуру типа data flow. В них выход одного блока функциональной схемы целиком поступает на вход другого блока. Когда потребители хотят получить данные, они выполняют операцию типа Р. Когда производители создают данные, они выполняют операцию типа V.
Изначально семафоры создавались как глобальные структуры, совместно с глобальными API-функциями, реализующими операции Р и V.
Теперь семафоры реализуются в виде класса объектов. Обычно абстрактный класс Семафор определяет чисто виртуальные функции типа Р и V. От него производятся классы, реализующие два указанных типа семафоров: защита критической секции и обеспечение совместного доступа к ресурсу. В смысле видимости оба типа семафоров могут быть объявлены либо глобально во всей операционной системе, либо глобально в пространстве процесса. Первые видны всем процессам системы и, следовательно, могут ими управлять. Вторые действуют только в пространстве одного процесса и, следовательно, могут управлять его потоками.
Сам семафор ничего не знает о том, что он защищает. Ему обычно передается ссылка на объект класса, который хочет использовать критическую секцию, и он либо дает доступ к объекту, либо приостанавливает («усыпляет» – suspends) объект до тех пор, пока доступ не станет возможным. Важно отметить, что при реализации семафоров и других объектов ядра используют специальные атомарные команды (atomic steps), которые не прерываются системой.
Семафор позволяет ограничить доступ потоков к объекту синхронизации на основании их количества.
Пример алгоритма работы с семафором. Требуется, чтобы к какому-нибудь объекту могли обратиться максимум 3 потока:
- семафор инициализируется, ему передается количество потоков, которые к нему могут обратиться;
- при каждом обращении к ресурсу счетчик семафора уменьшается. Когда счетчик уменьшится до 0, к ресурсу обратиться больше нельзя;
- при отсоединении потока от семафора его счетчик увеличивается, что позволяет другим потокам обратиться к нему;
- сигнальному состоянию соответствует значение счетчика больше нуля. Когда счетчик равен нулю, семафор считается не установленным (сброшенным).

PS Заранее большое спасибо.
NYH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача про мост Sparky Помощь студентам 23 12.09.2010 19:51
Как работает мост между подключениями в Windows? jojahti Свободное общение 2 28.09.2009 14:15
AMD. Северный мост. Охлаждение ПК. Web-Gangsta Компьютерное железо 17 28.07.2009 15:26