Добрый день! Очень прошу помочь решить вопрос !
Есть два приложения, написанные на С++/Qt. Приложение №1 обрабатывает данные, а №2 занимается визуализацией и gui.
Обмен данными между процессами реализован при помощи shared memory (QSharedMemory). Таким образом, в процессе №2, создаются 800 раз по 4000 байт сегменты shared memory,а в процессе №1 идет просто подсоединение.
Очередность доступа к сегментам данных регулируются двумя системными семафорами, один из которых занимается в процессе №1 и освобождается в процессе №2, и наоборот, второй семафор занимается в №2 и особождается в №1.
Еще я убрал ограничение на количество системных семафоров :
в файле /etc/sysctl.conf прописал kernel.sem = 250 32000 32 2000, т.о. стало 2000 семафоров.
Без этого пункта процесс №2 не мог создать выше 122 сегментов shared memory.
Теперь проблема: когда два процесса поработают минуты три, процесс №2 виснет намертво. А если убрать процедуры lock/unlock у shared memory, то загрузка процессора процессом №2 подскакивает в 2 раза, и составляет 50 процентов, при стандартных 24-25 %.
??