如何衡量多线程C程序所花费的时间?

时间:2016-07-13 21:46:30

标签: c multithreading profiling lock-free

我已经实现了一个无锁链接列表数据结构。我正在尝试衡量该计划所用的时间。我有4个帖子。线程使用pthreads库实现。目前我正在使用以下方法测量时间

#include <time.h>
/*
Some code
.........
*/
pthread_t t1,t2;
clock_t begin = clock();
pthread_create (&t1, NULL, thread1, (void *)mylist);
pthread_create (&t2, NULL, thread2, (void *)mylist);
pthread_create (&t3, NULL, thread3, (void *)mylist);
pthread_create (&t4, NULL, thread4, (void *)mylist);
pthread_join (t1, NULL);
pthread_join (t2, NULL);
pthread_join (t3, NULL);
pthread_join (t4, NULL);
clock_t end= clock();
double time_s = (double)(end-begin)/ CLOCKS_PER_SEC;

我认为这会给我正确的结果。但是当我测量到这样的单个线程所花费的时间时

void * thread1(void * args)
{
    clock_t begin = clock();
    /* Some Code */
    clock_t end= clock();
    double time_s = (double)(end-begin)/ CLOCKS_PER_SEC;
}

时机不同。这些是我得到的阅读材料:

Total time: 
2.06341

Thread 1
Time: 0.767887

Thread 2
Time:1.20169

Thread 3
Time:1.92999

Thread 4
Time:2.0584

为什么会这样?它是否正确?任何帮助将不胜感激。

0 个答案:

没有答案