Мне нужен быстрый механизм связи межпотока для передачи работы (void*
) от задач TBB до нескольких рабочих, которые находятся в выполняющих/блокирующих операциях. В настоящее время я изучаю использование pipe()
+libevent
. Существует ли более быстрая и более изящная альтернатива для использования с Intel Threading Building Blocks?
Вы должны быть в состоянии просто использовать стандартную память с мьютексными блокировками, поскольку потоки используют одно и то же пространство памяти. Решение pipe()+libevent кажется более подходящим для межпроцессного взаимодействия, когда каждый процесс имеет свое пространство памяти.
Посмотрите Implementing a Thread-Safe Queue using Condition Variables. В нем используется очередь STL, мьютекс и условная переменная для облегчения межпотокового взаимодействия. (Я не знаю, применимо ли это к Intel Threading Building Blocks, но поскольку TBB не упоминается в вопросе/заголовке, я предполагаю, что другие попадут сюда, как и я - в поисках механизма межпоточного взаимодействия, который не является IPC. И эта статья может помочь им, как помогла мне.)
.