Реализация безблокирующей очереди с несколькими производителями / потребителями в C \ C ++

Я закончил свою базовую реализацию для одного производителя / потребителя в очереди без блокировки, и она работает нормально. Однако, когда я пытаюсь расширить его до нескольких производителей / потребителей, у меня возникают конфликты. Я нашел через SO похожий пост, связанный с этой проблемой ( Есть ли такая вещь, как безблокирующая очередь для нескольких потоков чтения или записи? ), и я нашел статью, которая немного пошла дальше исходной реализации. Я также сбит с толку этой статьей, которая надеялась на какое-то руководство.

Во-первых, действительно ли эта реализация работает при использовании нескольких производителей / потребителей или есть что-то, чего мне не хватает в исходной реализации Майкла-Скотта, которая работает с настройкой нескольких производителей / потребителей.

Второй - в статье Оптимистический подход к свободным от блокировок FIFO очередям , в разделе «Удаление из очереди» показано использование фиктивного значения. Как я могу определить подходящее значение для использования? Если я использую целые числа, что даст мне уверенность в том, что целое число, которое я выберу в качестве фиктивного значения, не является фактическим значением, которое я решил поставить в очередь?

Любой совет или общее направление было бы замечательно. И если кто-то хочет знать, я создаю это в Visual Studio, чтобы лучше понять неблокирующие алгоритмы. Я хотел бы сделать это как можно более универсальным, чтобы я мог ставить в очередь все, что угодно (данные в очереди являются шаблонными, чтобы пользователь мог указать, что ставить в очередь).

11
задан Community 23 May 2017 в 11:53
поделиться