Подумайте о том, как вы хотите распространять информацию, и о возможных совпадениях - если кому-либо из читателей понадобится больше времени, чтобы закончить чтение, чем требуется для обновления, тогда у вас возникнут проблемы с предлагаемым подходом.
То, как я читаю ваш вопрос, есть несколько читателей, писатель не знает (или не заботится по большей части), сколько читателей одновременно, но хочет уведомить читателей, что для чтения доступно что-то новое. ,
Не зная, сколько существует потенциальных читателей, вы не можете использовать простой мьютекс или семафор, чтобы знать, когда читатели закончили, не зная, когда все закончили, у вас нет хорошей информации о том, когда нужно сбросить событие, чтобы уведомить для следующего прочитанного события.
MS Windows:
Общие сегменты
Одним из вариантов является размещение переменных в общем сегменте данных. Это означает, что одни и те же переменные могут быть прочитаны (и записаны) всеми исполняемыми файлами, которые назвали один и тот же сегмент, или, если вы поместите его в DLL - загрузите общую DLL.
Подробнее см. http://www.codeproject.com/KB/DLL/data_seg_share.aspx.
// Note: Be very wary of using anything other than primitive types here!
#pragma data_seg(".mysegmentname")
HWND hWnd = NULL;
LONG nVersion = -1;
#pragma data_seg()
#pragma comment(linker, "/section:.mysegmentname,rws")
IPC - COM
Сделайте ваше главное приложение ком-сервисом, где работники смогут регистрироваться для событий, выкладывать изменения в каждый приемник событий.
МПК - двойные события
Предполагая, что 1 цикл чтения намного меньше времени между событиями записи.
создайте 2 события ручного сброса, в любое время будет сигнализировано не более 1 из этих событий, чередование между событиями. сигнализация немедленно освободит всех читателей, и после завершения они будут ждать альтернативного события.