以相同的结果测量时间

时间:2017-07-12 21:04:12

标签: c++ multithreading time

我想测量时间(非常精确地以毫秒为单位)并在某个时间启动另一个线程(总共4个)。我尝试过:

double Time()
{
    duration = (std::clock() - start);
    return duration;
}

//...

start = std::clock();
while (Time() < 1000)
{
    //Start thread...
    //...
}

它有效,但在每次实验中我都会得到不同的结果(差别很小)。 它甚至可能吗?是否取决于有多少程序在后台运行(它会降低我的电脑速度)?所以,如果有可能我应该使用什么?感谢

(对不起我的英文)

1 个答案:

答案 0 :(得分:1)

操作系统以量子运行 - 少量处理块低于我们的感知水平。

在单个量子中,CPU应该合理稳定地运行。如果您的任务将使用一个以上的时间量,那么操作系统将可以自由地使用一些时间来执行其他任务。

使用condition variable您可以notify_all唤醒任何等待的线程。

因此,启动线程数,但在测量它们并开始工作之前让它们等待condition_variable。然后当condition_variable notify_all线程将运行时。如果它们同时启动,您应该获得同步稳定的结果。

出现差异。

  1. 未安排 - 您的CPU上的核心正在执行其他操作,因此1个或多个线程错过了量子
  2. 在IO上被阻止。如果您需要与磁盘进行交互,那么在数据可用之前可能会导致阻塞。
  3. 在互斥锁中被阻止 - 如果他们正在修改共享资源,等待资源变为空闲会增加时间。
  4. 缓存行为某些操作会导致刷新所有CPU的缓存,这会影响所有线程的性能。
  5. 数据是否在缓存中,CPU从L1缓存运行得比从主内存运行得快。如果线程读取相同的数据,它们将互相帮助导致数据被缓存,并以相同(ish)的速度运行。