Одновременная обработка запросов без создания тредов
От: Аноним  
Дата: 30.07.11 07:23
Оценка:
Здравствуйте, всем доброго времени суток.
Предположим, в программе имеются некоторые объекты, для которых необходимо обрабатывать запросы. Обработка таких запросов может идти одновременно( но только для разных объектов, если повторный запрос приходит на объект, который находится в состоянии обработки он обязан его проигнорировать ). Очевидным является подход, когда для каждого такого запроса мы заводим отдельный трэд.(т.е. каждому объекту будет соответствовать "свой" тред) А можно ли в этой ситуации вообще обойтись без лишних тредов и обрабатывать все объекты(точнее запросы с ними связанные) в одной нити? Подскажите как можно реализовать такую концепцию на C?

Небольшие пояснения: В контексте этого сообщения объекты — это обычные структуры(вернее их экземпляры), содержащие некоторые данные. Создание и инициализация таких объектов выполняется кастомером( во время инициализации он специфицирует поведение объектов на различные типы запросов, задавая соответствующие колбэки, т.е. обработка запросов в общем случае сводится к вызовам кастомерских колбэков)


Конечно, можно создать список, в котором будут храниться данные для актуальных запросов и в отдельном треде последовательно в цикле "проходить" по всем элементам списка, вызывая соответствующие колбеки, время обработки запроса можно ограничить с помощью таймера и прерывать выполнение запроса по таймауту, перейти к выполнению следущего элемента по списку, удаляя завершённые запросы из списка. Вот только неясно, как можно продолжить в таком случае выполнение прерванной таким образом функции с того места, где она "прервалась".( если это можно вообще в данной реализации )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.