Межпроцессная сигнализация: Семафоры POSIX / Общая память против TCP-сокета - PullRequest
0 голосов
/ 06 октября 2018

Я делаю приложение, в котором оно должно связываться с другим процессом на том же компьютере. Мне нужно сообщить об ошибке от процесса корневого уровня процессу 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 работает навысокий приоритет.У меня есть много других модулей, работающих в системе одновременно.

  1. В чем разница в производительности при увеличении / уменьшении sleep_time?
  2. В чем разница в производительности, если я использую сокеты для сигнализации процесса пользовательского интерфейса (P1 в качестве клиента и P2как сервер)?
  3. Что еще я могу сделать, чтобы оптимизировать этот механизм, который я использую?
...