Синхронизация в одном производителе + модель с несколькими потребителями с общей памятью - PullRequest
0 голосов
/ 13 марта 2011

Я хочу реализовать модель Unix для одного производителя, для нескольких потребителей с общей памятью
Производитель: поместить фрейм данных (~ char [1024]) в сегмент памяти
Потребители: запоминают данные в своей собственной памяти и выполняют некоторую обработку

Некоторая соответствующая информация:

  1. Потребитель может пропустить какой-то фрейм данных
  2. Потребители независимы, например.Это нормально, если один потребитель получает данные 1,2,4, а другой получает 2,3,5
  3. Одновременно будут работать около 10 потребителей
  4. Производитель может генерировать данные быстрее, чемпотребители могут обрабатывать
  5. Медленный / зомби-потребитель не должен замедлять работу всей системы
  6. Потребитель пропустит memcpy, если увидит те же данные

Я настроилразделяемая память, и используйте блокировку чтения-записи pthread, но она кажется медленнее, чем использование модели tcp

Мой вопрос: какая синхронизация лучше всего подходит для такого типа модели?

1 Ответ

0 голосов
/ 13 марта 2011

Вы уверены, что проблема в используемой модели синхронизации?

Я думаю о другом: возможно, продюсер "держит маркер" слишком долго.Например, созданный файл должен выдавать 1024 байта в частной памяти и хранить общую память только для записи новых данных?

Убедитесь, что критическая секция настолько мала, насколько это возможно.

...