@samokiller

Как организовать QSharedMemory на 3 потока?

Пишу на qt. Цель - быстродействие. Размеры потребляемой памяти не особо важны.

1-й процесс является библиотекой которая подключается к стороннему приложению, получает от него поток данных и размещает их в SharedMemory.
2-й процесс содержит 2 потока, один поток читает данные SharedMemory выбирает нужные и обрабатывает их, второй поток читает SharedMemory и сохраняет данные в БД.

После того как оба потока считали данные, они, видимо, должны как то подать сигнал 1-му процессу, и тогда первый может зачистить данные и записать следующую порцию.
И так по кругу.

1) Оптимальна ли такая архитектура для быстродействия?
2) Как лучше организовать сигнал к 1-му процессу о том что оба потока забрали данные и можно очищать и писать новые? Нужно ли для этого использовать мьютексы/семафоры? Или просто пытаться память захватывать? Мне кажется что оптимальным был бы вариант писать в какой-то буфер статус, аля 0 - данные считаны, можно перезаписывать, 1 - данные забраны первым потоком, 2 - данные забраны вторым потоком. Какими инструментами реализуется такой механизм?
3) Самым медленным звеном в этой цепочке является поток который пишет в БД. Можно ли, при сохранении одного буфера SharedMemory, сделать так чтобы вычисления в первому потоке не ожидали задержки пока данные скинуться в БД?
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ответы на вопрос 1
Zifix
@Zifix Куратор тега Qt
Barbatum
1) Должно работать максимально быстро, по идее.

2) Да, нужно использовать, почитайте что-нибудь про примитивы синхронизации, как работают и как используются в классических задачах.

Очень грубо говоря, второй процесс должен висеть на семафоре, захваченном первым, пока тот пишет данные в SM. После этого уже первый процесс должен висеть на семафоре, захваченном вторым, пока второй поток данные не считает.

3) А зачем вообще ему знать, что там второй поток делает? Считал данные, и сразу начал делать вычисления.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы