C/C++ - 模拟长时间运行的操作

Bin*_*now 5 c c++ unix

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

但这是一个简单的问题,因此我需要模拟长时间运行的操作来分析有效的加速。

  1. sleep()/usleep() 不是一个选项。我需要保持 CPU 忙碌,以便从机程序在其他从机休眠时无法工作。这里的加速是不正确的。

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

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

Bla*_*iev 4

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;
}
Run Code Online (Sandbox Code Playgroud)