Здравствуйте, Hydrophobia, Вы писали:
H>подозреваю что любой IPC метод подойдет (очередь сообщений, пайпы, файлы, сокеты, нотификации, пр).
Да, это вот всё подойдёт!!
Но, для теста на собеседовании уже привёл псевдокод в первом реплае:
псевдокод (просто идея, без обработки ошибок)
Subscribe(key, consumer)
{
queue=findQ(key)
while(true)
{
WaitFSObject(queue->hasData,INFINITE)
if(queue->unsubscribed) return;
while(true)
{
if(queue->unsubscribed) return;
Data d=queue->GetData();
if(d != NULL) consumer->Consume(key, Data);
else break;
}
}
}
consumer->Consume() может вызвать Unsubscribe, который установит queue->unsubscribed=true и SetEvent(hasData)
Просьба воспринимать это всего лишь как идею и 'псевдокод'.
H>[i]Необходимо сделать универсальный (библиотечный) обработчик нескольких очередей, позволяющий:
Я бы делал на основе
https://www.boost.org/doc/libs/1_71_0/doc/html/boost/lockfree/queue.html
И тестов побольше, чтобы хоть примерно оценить масштабируемость, производительность и вот это вот всё.