C/C++-模拟长时间运行

C/C++ - Simulate long running operation

本文关键字:长时间 运行 模拟 C++-      更新时间:2023-10-16

我正在分析一个在多个处理器上运行的并行算法。

但这是一个简单的操作,所以我需要模拟一个长期运行的操作来分析有效的加速。

  1. sleep()/usleep(。我需要让CPU保持忙碌,这样当其他从属程序睡眠时,从属程序就无法工作。这里的加速是不正确的。

  2. 循环为长空是一种选择。但我也想明确地设置操作时间。

有没有办法将这两者结合起来,或者使用其他方法来获得固定时间的长操作?

在进入循环之前调用gettimeofday并记住时间。在循环中,连续调用gettimeofday并计算当前时间与开始时间之间的差值。当差异足够大时,打破循环。

本质上,类似的东西:

struct timeval tv_begin, tv_current;
gettimeofday(&tv_begin, NULL);
for (;;) {
    gettimeofday(&tv_current, NULL);
    unsigned long long diff = 
        (tv_current.tv_sec * 1000000 + tv_current.tv_usec) -
        (tv_begin.tv_sec * 1000000 + tv_begin.tv_usec);
    if (diff > TIMEOUT)
        break;
}

getitimer()/settimer()。设置计时器,让SIGALRM的信号处理程序设置一个开关,使您脱离循环。循环做它所做的事情,或者什么都不做,直到计时器关闭。