![]() |
![]() ![]() |
![]() |
LeX |
![]()
Сообщение
#1
|
Гость ![]() |
Задача о читателях и писателях
Задача о читателях и писателях. Базу данных разделяют два типа процессов — читатели и писатели Читатели выполняют транзакции, которые просматривают записи базы данных, а транзакции писателей и просматривают, и изменяют записи. Предполагается, что вначале база данных находится в непротиворечивом состоянии (т.е. отношения между данными имеют .смысл). Каждая отдельная транзакция переводит базу данных из одного непротиворечивого состояния в другое. Для предотвращения взаимного влияния транзакций процесс-писатель должен иметь исключительный доступ к базе данных Если к базе данных не обращается ни один из процессов-писателей, то выполнять транзакции могут одновременно сколько угодно читателей. Приведенное выше определение касается разделяемой базы данных, но ею может быть файл, связанный список, таблица и т.д Задача о читателях и писателях — это еще один пример выборочного взаимного исключения. В задаче об обедающих философах пары процессов конкурировали за доступ к вилкам. Здесь за доступ к базе данных соревнуются классы процессов. Процессы-читатели конкурируют с писателями, а отдельные процессы-писатели — между собой. Задача о читателях и писателях — это также пример задачи общей условной синхронизации: процессы-читатели должны ждать, пока к базе данных имеет доступ хотя бы один процесс-писатель; процессы-писатели должны ждать, пока к базе данных имеют доступ процессы-читатели или другой процесс-писатель. Напишите что надо делать не пойму!!! Если есть программа буду очень благодарен!!! P.S очень срочно!!! |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Ты уверен, что тебе в этот раздел, а не в "теорию" хотя бы? Кстати, ты привел описание проблемы, спасибо огромное. Но... Вопроса не видно. В чем проблема?
Вот тут есть кое-что: 4.4.1. Задача о читателях и писателях как задача исключения 5.2.2. Читатели и писатели: сигнал оповещения |
LeX |
![]()
Сообщение
#3
|
Гость ![]() |
Мне надо программно реализовать задачу "читатели и писатели".
Только я не пойму при каком условии программа в приведенных примерах ссылок заканчивается. И не понятно условие приоритетов читателей и писателей. Например: указываешь количество читателей и писателей, они получается сколько угодно могут читать и писать. Получается что ли выход при нажатии кокойто клавиши. А если там я введу 5 читателей и 2 писателя, если первый читатель будет читать потом второй потом и т.д., то как писатель будет писать, если они читают и читают. ![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата(LeX @ 15.06.05 12:05) Получается что ли выход при нажатии кокойто клавиши. А если там я введу 5 читателей и 2 писателя, если первый читатель будет читать потом второй потом и т.д., то как писатель будет писать, если они читают и читают. Ты, по-моему, не совсем представляешь себе задачу... Это - использование потоков (или процессов), которые выполняются ОДНОВРЕМЕННО (параллельно). Для этого и ставятся семафоры, чтобы дать (или не дать) какому-либо процессу доступ к базе для чтения или записи... И заканчиваться программа должна, когда закончат работу все ее потоки (читатели закончат читать, а писатели - писАть)... На каком языке нужна программа? (говорю сразу, на TP такое сделать маловероятно, скорее всего FPC или Дельфи) |
LeX |
![]()
Сообщение
#5
|
Гость ![]() |
В том то и дело что надо на TP7.
И как писать параллельно? |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 21:29 |