Сначала небольшое объяснение того, что я пытаюсь сделать:
Я планирую написать программу с потоком сокетов, реализованным с использованием библиотеки boost :: asio, которая передает данные в анализатор, реализованный с использованием boost:дух :: ци.Анализатор примет пакеты и заполнит объект пакета, а затем добавит этот объект в конец связанного списка объектов пакета.Процессор пакетов прочитает первый объект в списке и выполнит его обработку, а затем перейдет к следующему элементу и удалит первый.
Я решил использовать связанный список, потому что если я использовал std :: queueЯ должен был бы заблокировать весь контейнер каждый раз, когда поток добавил пакет или процессор удалил один, что заставило бы два потока работать более или менее последовательно, чего я хотел бы избежать.Плюс класс очереди имеет тенденцию копировать все объекты, в то время как идея связанного списка имеет преимущество в том, что объект создается один раз, а затем просто указывает на него.Чтобы избежать сериализации всего этого бизнеса, я намереваюсь поместить boost: mutex-мьютексы в каждый узел и заблокировать их оттуда.Идея состоит в том, чтобы поток сокетов создал список и немедленно заблокировал первый узел, заполнил узел из анализатора, создал следующий узел и заблокировал его, затем разблокировал первый узел и перешел к следующему узлу для выполнения работы.Таким образом, в конце никогда не будет зависшего разблокированного узла, к которому процессор пакетов может перейти и удалить под носом потоков сокетов.Пакетный процессор проверит первый узел и попытается заблокировать его, если он заблокирует его, он выполнит его обработку, а затем разблокирует, получит следующий узел и затем удалит первый узел.Таким образом, сериализация ограничена теми временами, когда процессор пакетов догоняет класс потока сокетов.
Так что теперь мой вопрос, прежде чем я приступлю к работе по реализации этого, звучит ли это как хорошая идея??Я попробовал его на тривиальном тесте, и он, кажется, работает хорошо, и я не могу думать о каких-либо серьезных проблемах с этим, пока я реализую обработку исключений и стараюсь освободить любую память, которую я выделяю, но если кто-то может подуматьлюбые проблемы с этой идеей, которые я упустил, я был бы признателен за вклад.Также я был бы признателен за любые другие предложения, которые кто-либо мог бы предложить в качестве альтернативы или которые могли бы сделать эту идею лучше.
Заранее спасибо!