Я ищу наилучший способ эффективного распределения порций данных между двумя (или более) процессами в модели с поддержкой записи / записи для чтения / записи.
Мои текущие тесты с boost::interprocess
. Я создал managed_shared_memory
и пытаюсь заблокировать доступ к блоку данных с помощью мьютекса межпроцессного режима, хранящегося в общей памяти.
Однако даже при использовании sharable_lock
на считывателе и upgradable_lock
на записывающем устройстве клиент будет читать фрагментированные значения во время операций записи вместо блокировки . Выполняя аналогичную настройку чтения / записи между потоками в одном процессе, я использовал upgrade_to_unique_lock
для решения этой проблемы. Тем не менее, я не нашел его boost::interprocess
эквивалент. Существует ли один?
Сервер (писатель):
while (1) {
// Get upgrade lock on the mutex
upgradable_lock <MutexType> lock(myMutex);
// Need 'upgrade_to_unique_lock' here so shared readers will block until
// write operation is finished.
// Write values here
}
Клиент (читатель)
while (1)
{
// Get shared access
sharable_lock <MutexType> lock(myMutex);
// Read p1's data here -- occasionally invalid!
}
Я думаю, что главный вопрос под рукой таков: является ли межпроцессный мьютекс даже правильным способом доступа к разделяемой памяти между процессами в настройке с поддержкой записи?
Примечание: использование Boost 1.44.0