C语言 setitimer question



在我的双核机器上运行以下代码。

当我在同一台PC上运行应用程序的一个或两个实例时,我有100msec的正确定时分辨率。然而,当我在同一台PC上运行同一应用程序的3个实例时,时间分辨率超过100毫秒。是否有可能使应用程序的3个实例以100毫秒的相同分辨率运行?这与我的机器上的核数有关吗?

#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
void timer_handler ( int signum)
{
   double time ; 
   // obtain time here
   gettimeofday() ;
   printf("timer_handler at time = %lf n",
     time ) ;
}
int main ()
{ 
   struct sigaction sa;
   struct itimerval timer ;
   memset ( &sa, 0, sizeof ( sa ) ) ;
   sa.sa_handler = &timer_handler ;
   sigaction ( SIGALRM, &sa, NULL );
   timer.it_value.tv_sec = 0 ;
   timer.it_value.tv_usec = 100000;
   timer.it_interval.tv_sec = 0;
   timer.it_interval.tv_usec = 100000 ;
   setitimer ( ITIMER_REAL, &timer, NULL ) ;
   for (;;); 
}

setitimer(2)手册页如下:

计时器永远不会在请求的时间之前过期,但可能会过期(短)之后的时间,这取决于系统计时器的分辨率在系统负载上;看到时间(7).

显然,当您运行更多应用程序实例时,系统负载将变得更高,计时器将变得更不准确。

如果你替换了忙循环:

for (;;);

对于CPU约束较小的东西(如IO约束工作负载),计时将变得更准确。

相关内容

  • 没有找到相关文章

最新更新