Из-за политики, в которой я работаю, я не могу использовать версию Boost новее 1.33.1 и не могу использовать версию GCC новее 4.1.2. Да, это фигня, но я ничего не могу с этим поделать. Boost 1.33.1 не содержит межпроцессную библиотеку.
Тем не менее, один из моих проектов требует размещения std::map
(или, скорее, std::unordered_map
) в разделяемой памяти. Он записывается/изменяется ОДИН РАЗ, когда процесс загружается одним процессом ("сервером") и читается многими другими процессами. Я не делал IPC с общей памятью раньше, так что это довольно новая для меня территория. Я взглянул на shmget()
но shmget()
что я не могу постоянно использовать один и тот же ключ разделяемой памяти для выделения (как я полагаю, будет необходимо с распределителями контейнеров STL).
Существуют ли другие NON-BOOST STL-распределители, которые используют разделяемую память?
РЕДАКТИРОВАТЬ: Это было сделано раньше. У доктора Доббса была статья о том, как это сделать, еще в 2003 году, и я начал использовать ее в качестве справочного материала. Однако списки кодов неполные и ссылки на них перенаправляют на основной сайт.
РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: Единственная причина, по которой я не просто переписываю Boost.Interprocess, заключается в количестве кода. Мне было просто интересно, есть ли что-то относительно короткое и сжатое специально для разделяемой памяти POSIX, которое я мог бы переписать с нуля, поскольку передача данных между сетями также подлежит многодневному процессу утверждения...