Простите, если я пропустил очевидный ответ, но я искал это и не могу его найти. Я пытаюсь создать многопоточную программу, которая использует мьютексы как можно меньше. Ниже приведен основной дизайн. Я хочу знать, воссоздаю ли я колесо и, если да, то какой шаблон дизайна / алгоритм / подход я невольно позаимствовал?
У меня есть глобальный объект, который в основном представляет собой очередь сообщений для нескольких потоков. Каждый раз, когда создается поток, он получает функцию, которой он отправляет сообщения. Только поток может получить доступ к функции. Когда сообщение отправляется в функцию, объект принимает сообщение и помещает его в очередь.
Это очередь FIFO, которая в основном работает как общая память для связи между потоками. Дело в том, что только глобальный объект может добавлять или удалять сообщения. Каждый поток регулярно проверяет очередь. Каждый раз, когда он находит сообщение, которое он может использовать, он копирует это сообщение себе и затем сообщает глобальному объекту, что он читает данные. Если поток просматривает сообщение и не нуждается в нем, он все равно сигнализирует, что прочитал сообщение, но не копирует его. Когда каждый поток просматривает данные, глобальный объект удаляет сообщение.
Вот и все. Это просто. Это съедает память. Это просто для того, чтобы избежать блокировки переменных и т. Д.