Здравствуйте, 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 объектов, а во втором случа придется только очищать ее в процессе, что избавляет от копирования.
Это операция критична ко времени, поэтому тут делема.... Как лучше поступить ?