Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача "читатели и писатели"
Форум «Всё о Паскале» > Другое > Свободное общение
LeX
Задача о читателях и писателях
Задача о читателях и писателях. Базу данных разделяют два типа процессов — читатели и писатели Читатели выполняют транзакции, которые просматривают записи базы данных, а транзакции писателей и просматривают, и изменяют записи. Предполагается, что вначале база данных находится в непротиворечивом состоянии (т.е. отношения между данными имеют .смысл). Каждая отдельная транзакция переводит базу данных из одного непротиворечивого состояния в другое. Для предотвращения взаимного влияния транзакций процесс-писатель должен иметь исключительный доступ к базе данных Если к базе данных не обращается ни один из процессов-писателей, то выполнять транзакции могут одновременно сколько угодно читателей.
Приведенное выше определение касается разделяемой базы данных, но ею может быть файл, связанный список, таблица и т.д
Задача о читателях и писателях — это еще один пример выборочного взаимного исключения. В задаче об обедающих философах пары процессов конкурировали за доступ к вилкам. Здесь за доступ к базе данных соревнуются классы процессов. Процессы-читатели конкурируют с писателями, а отдельные процессы-писатели — между собой. Задача о читателях и писателях — это также пример задачи общей условной синхронизации: процессы-читатели должны ждать, пока к базе данных имеет доступ хотя бы один процесс-писатель; процессы-писатели должны ждать, пока к базе данных имеют доступ процессы-читатели или другой процесс-писатель.

Напишите что надо делать не пойму!!!
Если есть программа буду очень благодарен!!!

P.S очень срочно!!!
volvo
Ты уверен, что тебе в этот раздел, а не в "теорию" хотя бы? Кстати, ты привел описание проблемы, спасибо огромное. Но... Вопроса не видно. В чем проблема?

Вот тут есть кое-что:
4.4.1. Задача о читателях и писателях как задача исключения
5.2.2. Читатели и писатели: сигнал оповещения
LeX
Мне надо программно реализовать задачу "читатели и писатели".
Только я не пойму при каком условии программа в приведенных примерах ссылок заканчивается. И не понятно условие приоритетов читателей и писателей.
Например: указываешь количество читателей и писателей, они получается сколько угодно могут читать и писать. Получается что ли выход при нажатии кокойто клавиши.
А если там я введу 5 читателей и 2 писателя, если первый читатель будет читать потом второй потом и т.д., то как писатель будет писать, если они читают и читают. huh.gif
volvo
Цитата(LeX @ 15.06.05 12:05)
Получается что ли выход при нажатии кокойто клавиши.
А если там я введу 5 читателей и 2 писателя, если первый читатель будет читать потом второй потом и т.д., то как писатель будет писать, если они читают и читают.

Ты, по-моему, не совсем представляешь себе задачу... Это - использование потоков (или процессов), которые выполняются ОДНОВРЕМЕННО (параллельно). Для этого и ставятся семафоры, чтобы дать (или не дать) какому-либо процессу доступ к базе для чтения или записи... И заканчиваться программа должна, когда закончат работу все ее потоки (читатели закончат читать, а писатели - писАть)... На каком языке нужна программа?

(говорю сразу, на TP такое сделать маловероятно, скорее всего FPC или Дельфи)
LeX
В том то и дело что надо на TP7.
И как писать параллельно?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.