Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #5 : 06-01-2012 17:15 » |
|
AlexCasual, ты говоришь такие вещи, которые разбираются в самом шаблоне. Может тогда с шаблоном лучше "тщательнее" познакомиться?
Когда писатель собирается писать, все новые читатели блокируются до конца записи. Действующие читатели со временем освободят ресурс. С выходом последнего действующего читателя писатель приступает к работе. Затем, после его выхода, доступ получают все ждущие читатели.
Ситуация, когда писатель не сможет начать работу, возможна только в случае, если есть какой-то вечный читатель, который никогда не освобождает ресурс. Но это уже ошибка проектирования.
Finch правильно предложил, что блокировке подвергаться может не весь ресурс, а лишь какая-то его часть. Это уменьшает количество блокировок.
Минимизация времени ожидания писателя в блокировке возможна, если в целом в системе есть разграничение по времени или пространству работы писателя и читателей.
Представь себе столовую и, допустим, уборщицу. Уборщица должна периодически прибирать столы и мыть полы. Ей удобнее, чтобы посетители в столовую заходили организованными группами, бригадами или сменами: все зашли, поели, ушли - тогда будет время между сменами, когда можно прибраться. В той же столовой, где посетители тянутся неорганизованно один за другим, в зале постоянно присутствует некоторое неснижаемое количество посетителей, и уборка усложняется.
Представь, можно ли во втором случае организовать очередь из столов - чтобы новые посетители садились за столы в определённом последовательном порядке, благодаря чему в группу "свободные столы" последовательно и циклично входят все столы столовой, и столь же последовательно и циклично можно производить их уборку.
Вообще на зримом примере столовой и уборщицы можно массу стратегий придумать. Но это уже стратегии управления выделением ресурса, а не шаблон "читатели-писатель".
|