我正在制作一个应用程序,它必须与同一台计算机上的另一个进程进行通信。我需要从根级进程向UI进程发出错误信号。为此,我正在使用信号量。内核级进程循环运行并出现错误,它会锁定信号量并将错误类型写入共享内存段中。 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
时,性能有何不同?