计算线程 运行 时间的正确方法是什么?

What's the right way to count the thread run time?

像这样:

    thread t1(getPrimes,begin,end, ref(vect));
    start = chrono::high_resolution_clock::now();
    t1.join();
    finish = chrono::high_resolution_clock::now();

或者像这样:

    start = chrono::high_resolution_clock::now();
    thread t1(getPrimes,begin,end, ref(vect));
    t1.join();
    finish = chrono::high_resolution_clock::now();

我应该在线程 t1 之前还是之后启动它?

新执行线程的开始顺序为std::thread的构造函数的完成。

在第一个版本中,整个执行线程理论上可以运行和finish 在原始执行线程调用 now() 之前 first 时间。 C++ 不保证执行线程不会真正启动并且 运行 仅在第一次调用 now.

之后

第二个版本保证覆盖整个执行线程,加上一点std::thread的构造开销。

更好的方法是将 运行 时间捕获移动到实际执行线程本身。