У меня есть производитель и потребитель. Производитель записывает фиксированные элементы размера в заданную область разделяемой памяти, и потребитель извлекает их.Синхронизированный производитель и потребитель с циркулярным буфером
Производитель может быть заметно медленнее или быстрее, чем потребитель, случайным образом.
То, что мы хотим, чтобы
Если производитель работает быстрее, чем потребитель, когда он заполняет кольцевой буфер, он продолжает писать на старых кадрах (кроме того, что потребитель потребляет Конечно, я подчеркиваю, что производитель и потребитель должны быть синхронизированы в решении, потому что это несвязанные процессы).
Если вместо этого потребитель быстрее производителя, он должен ждать нового кадра и потреблять его, когда он есть.
Я нашел реализации производителя/потребитель кольцевых буферов, но только те, которые не уважают первый запрос (то есть, если кольцевой буфер заполнен, они ждут для потребителя, чтобы закончить, в то время как то, что я хотите перезаписать самые старые кадры).
Я бы предпочел не откатывать мое собственное (подверженное ошибкам) решение, но использовать предварительно подготовленный, проверенный. Может ли кто-нибудь указать мне на хорошую реализацию C? (C++ тоже нормально).
Большое спасибо.
Похоже, вы просто пытаетесь удалить ограничение, которое кто-то должен был кодировать в реализации, на которые вы смотрели. Если вы просто удалите любой код, который остановит продюсера от перезаписи данных в его буфере, я думаю, он будет работать так же, как и то, что вы ищете. –
@Carl - а также позволяя голове переписать хвост, вам также нужно будет продвигать указатель на хвост, иначе то, что вы делаете, эквивалентно простому опорожнению всего буфера. – ChrisW
@Carl - Нет, просто разрешить продюсеру перезаписывать старые буферы, удаляя семафор, означает перезапись предмета, который потребитель потребляет. Мне нужна синхронизированная реализация потребителя-производителя. – janesconference