Re[6]: сериализация std::queue
От: k732  
Дата: 20.07.07 11:15
Оценка:
Здравствуйте, NKZ, Вы писали:

NKZ>В общем случае void save_queue(Archive & ar, const Container &s) тоже самое что и void save_collection(Archive & ar, const Container &s) в бусте, подразумевается, что при сериализации контейнер не модифицируется.


логично. согласен.

NKZ>А так все зависит от твоих требований к очереди, например

NKZ> 1. При остановке обработки ты должен сериализовать очередь, а при старте прочитать и обработать. В этом случае можно(но не обязательно), разрушать очередь.

ну лучше тогда придерживаться принятой сигнатуры.

NKZ> 2. Либо серилизовать данные в процессе обработки, например отсылать их для другим модулям для нотификации об изменений данных, тогда не надо разрушать.


Тут вся проблемма в том, что данные помещаются в очередь несколькими писателями. Естественно синхронизировано.
Но в процессе этих действий читатель запрашивает данные для обработки. Тут синхронизация в самом методе сериализации (archive). Если я не буду подчищать очередь в просессе сериализации, то потом мне все равно нужно ее почистить т.к. она имеет ограничение по размеру, а отправленные данные мне больше не нужны. Если же я буду чистить очередь сразу, то отойду от принятой бустовской сигнатуры.

Разниза лишь в том, что в первом случае мне придется выполнять копирование, а после очистку, что может быть накладно, т.к. ограничена 50000 объектов, а во втором случа придется только очищать ее в процессе, что избавляет от копирования.

Это операция критична ко времени, поэтому тут делема.... Как лучше поступить ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.