Я делаю приложение, в котором оно должно связываться с другим процессом на том же компьютере. Мне нужно сообщить об ошибке от процесса корневого уровня процессу UI.Для этого я использую семафор.Процесс на уровне ядра выполняется в цикле и при ошибке блокирует семафор и записывает тип ошибки в сегмент общей памяти.Пока пользовательский интерфейс отслеживает семафор в цикле, если он обнаруживает, что семафор заблокирован, он уведомит пользователя об ошибке с типом ошибки в сегменте общей памяти.
//err_sem= named semaphore
P1_root_lvl()
{
while(1)
{
//Do Work
if(error_type1)
{
err_flag=true;
sem_trywait(&err_sem);
shared_mem=type1;
}
else if(error_type2)
{
err_flag=true;
sem_trywait(&err_sem);
shared_mem=type2;
}
else if(ok_state==true && err_flag==true)
{
sem_post(&err_sem);
err_flag=false;
}
}
}
P2_UI()
{
long sleep_time=10000
while(1)
{
sem_getvalue(&err_sem,ok)
if(ok==1)
{
//All OK
}
else if(ok==0)
{
err_type=shared_mem;
}
usleep(sleep_time);
}
}
P1 работает навысокий приоритет.У меня есть много других модулей, работающих в системе одновременно.
- В чем разница в производительности при увеличении / уменьшении
sleep_time
? - В чем разница в производительности, если я использую сокеты для сигнализации процесса пользовательского интерфейса (P1 в качестве клиента и P2как сервер)?
- Что еще я могу сделать, чтобы оптимизировать этот механизм, который я использую?