3 / 3 / 0
Регистрация: 27.02.2014
Сообщений: 36
|
|||||||||||
1 | |||||||||||
VC++ 6.0 dll c секцией разделяемой памяти22.02.2018, 01:12. Показов 634. Ответов 0
Метки нет (Все метки)
Есть библиотека (dll) с секцией разделяемой памяти
В той части dll, которая попадает в адресное пространство процесса, есть буфер (Cell) в котором производится сериализация-десериализация данных. Что имеем: Есть 2 приложения А и Б. Оба приложения грузят одну и ту же dll по одинаковому пути. Приложение А "собирает" данные в свой буфер (Сell). Копирует содержимое буфера Cell в какой-либо элемент кольцевого буфера по средствам memcpy(&Ring[x],&Cell,sizeof(_RING)). Второе приложение Б "узнает" индекс в кольце, пробует прочитать данные и получает access violation to read. Более простой вариант, когда в распределенной памяти висит какой-нибудь int и приложение А его постоянно изменяет, а приложение Б его постоянно читает, прокатывает без проблем. Подозреваю, что проблема как-то связана с memcpy(...) или с указателями *Next и *Prev Добавлено через 5 часов 36 минут В общем разобрался. Сама по себе разделяемая память не может одновременно использоваться двумя и более потоками/процессами. Пришлось прикручивать мьютекс. С одной стороны всё классно - dll работает как часы и можно спокойно перебрасывать любые данные между процессами. С другой стороны, функция отправки пакета, функция проверки наличия пакетов и функция получения пакета стали блокируемыми. И время их блокировки возрастает по мере роста количества "подключенных" к dll процессов/потоков, не глядя на то, что они выполняются на одном дыхании. Добавлено через 23 секунды Тему можно закрыть
0
|
22.02.2018, 01:12 | |
Ответы с готовыми решениями:
0
Аська на основе разделяемой памяти Хранение указателей в разделяемой памяти Синхронизация доступа к разделяемой памяти Считать структуру из разделяемой памяти |
22.02.2018, 01:12 | |
22.02.2018, 01:12 | |
Помогаю со студенческими работами здесь
1
Запись и считывание разделяемой памяти Прогон программ с использованием разделяемой памяти Сделать массив из 10 int в разделяемой памяти В чем основное преимущество разделяемой памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |