Я хочу создать многопоточное приложение, которое выполняет следующие действия: Один поток записывается последовательно в круговой буфер. Тогда будет n-число потоков считывателей, которые ждут некоторого сигнала, инициированного потоком записи, чтобы проснуться и прочитать из кругового буфера. Сигнал должен каким-то образом содержать целочисленное значение, представляющее смещение кругового буфера для чтения. Можно ли это сделать в C++? Любая помощь будет оценена по достоинству.Многопоточная сигнализация
Поскольку я хочу, чтобы дизайн, способный обрабатывать как можно более быстрый высокоскоростной трафик реального времени, я хочу устранить любое распределение/освобождение памяти. Таким образом, круговая очередь будет смежным куском памяти, выделенной при запуске. Я не уверен, что очередность, о которой вы говорите, соответствует этому.
Изготовителю нужно будет только отслеживать, с чего начать писать в круглый буферный массив байтов каждый раз, когда ему есть что писать. Так что все, что я действительно прошу, - это способ продюсера распространить «сигнал», когда он завершил событие записи, которое содержит местоположение (смещение) последнего байта, записанного в круговой буфер. Это позволит избежать необходимости блокировки механизма.
Потребительские потоки просыпаются, когда этот «рассеянный» сигнал/событие принимается. Им самим нужно только следить за тем, где они остановились, а затем просто читать до значения смещения сигнала. Наконец, производитель и потребители, конечно, должны знать, где начинается круговой буфер, и насколько он велик, и они знают, когда их обертывать.
Да, это возможно. –
Вы должны показать нам, что вы пробовали, и описать, как его поведение отклоняется от ваших ожиданий. – andand