Re: Сортировка "наобо рот"
- From
- Oleg Khovayko ()
- To
- Andrew Ezhguroff
- Date
- 2002-10-13T00:12:12Z
- Area
- RU.ALGORITHMS
From: Oleg Khovayko <olegh@hotpop.com>
Andrew Ezhguroff wrote:
> OK> В этому случае твой алгоритм
>
> Это не алгоритм, а голая идея. :-)
После данного пояснения - понял и проникся.
До этого же данный тезис был неочевиден.
> Это означает, что все сообщения предназначены единственному устройству.
Ну дык! И я о том же.
> Подобную ситуацию придется решать в любом алгоритме
Да.
> и простейшее лобовое
> решение - для каждой очереди хранить время отправки последнего сообщения.
Можно и так делать...
> Еще раз - это не алгоритм, а идея. Понятно, что запускать подобный
> бесконечный цикл в драйвере абсурдно.
Вот и я о том же. Что твое предыдущее письмо никак нельзя рассматривать
как руководство к действию. А рассматривать его можно разве что как
рассуждения общего порядка - "куда думать".
>
> Например, лучше использовать не массив, а список (циклический?)
> актуальных
> очередей.
И обслуживать в нем две специальные ситуации "список пуст" и
"в списке только одина очередь".
> При этом пустая очередь исключается из списка
И куда девается? Отдается на растерзание free() или переносится в
некий другой "список свободных очередей"? Оба способа имеют свои
недостатки...
, а очередь,
> сообщение из которой отправляется, перемещается в конец списка.
Ага. То есть циклический список должен быть двусвязным?
или же для каждой перестановки его придется несколько раз обежать по кругу.
> Очередь,
> ставшая непустой (в результате появления нового сообщения)
Еще потенциальная проблема - если рассматриваемый нами
процесс-диспетчер очередь лихо будет переставлять очередь по памяти,
то он сможет создать проблемы для процесса-наполнителя очереди.
Можно, конечно, решить проблему путем хранения в кольцевом списке
указателей на очереди, но тогда будут проблемы с удалением/созданием
очередей в контексте процесса-наполнителя.
, добавляется
> также в конец списка. При исчерпании списка процесс приостанавливается до
> появления нового сообщения. Если время после отправки предыдущего сообщения
> из текущей очереди слишком мало, то процесс приостанавливается на
> достаточное время.
Но несмотря на описаные выше тонкие места, это уже похоже на работающий
вариант. Теперь осталось только закодировать. ;)
Я вот свой "почти рабочий" вариант, с одной единственной
очередью, привел. Есть против него возражения?
> ИМХО, скорее всего будет с точностью до наоборот - в RT-11SJ драйверы
> работать может и будут, а вот приложение - нет.
Да, здесь ты прав. Поправка принимается.
> А вот в "нормальной"
> многозадачной среде если бесконечный цикл работает не на максимальном
> приоритете, то система все же будет функционировать.
Да. Но хреново.
.
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)