Вообще, ваш пример - это как раз наиболее правильный, современный и масштабируемый подход к взаимодействию потоков через обмен сообщениями. Он называется
MPI (Message Passing Interface). В Erlang и D, например, используется как механизм по-умолчанию для взаимодействия потоков.
В boost как раз есть
плюсовая обертка над MPI. Мне не приходилось ее использовать, в доках сразу же рассказывается, как это круто все работает между процессами. Подозреваю, что внутрипроцессный механизм там также присутствует в качестве частного случая.
Как сказал
@Lol4t0, можно использовать boost::asio::io_service, хотя этот подход направлен больше на события завершения ввода/вывода (там реализация паттерна Proactor в чисто виде), но никто не запрещает использовать чисто dispatch или post и получить такое подобие MPI.