pthread

1. 计时

使用pthread编写的多线程程序,若是用clock_t结构体和clock()函数计时,多线程程序的运行时间会偏大,如

#include <time.h>
clock_t begin, end;
begin = clock();
// pthread多线程代码
end = clock();
printf("%f秒\n",  (double)(t1 - t0) / CLOCKS_PER_SEC);

这是因为clock()记录了所有CPU的时钟滴答数1, 求出的自然是所有Cores的使用时间之和。要计算实际并行计算的真实时间,应该使用lrt,如:

#include <time.h>
struct timespec begin, end;
double timediff;
clock_gettime(CLOCK_MONOTONIC, &begin);
// pthread多线程代码
clock_gettime(CLOCK_MONOTONIC, &end);
timediff = end.tv_sec - begin.tv_sec + (end.tv_nsec - begin.tv_nsec) / 1000000000.0;
printf("排序时间为%f秒\n",  timediff);

其中的timespec的结构如下

struct timespec {
    time_t tv_sec;     // 秒    
    long int tv_nsec;  // 纳秒   
};

编译时需加入参数-lrt, 如:

[root@slave02 yy]# g++ test.cpp -lrt -o test -lpthread

  1. 时钟滴答数(clock tick),从进程启动开始计时,因此这是相对时间。每秒钟包含CLOCKS_PER_SEC(time.h中定义的常量,一般为1000)个时钟滴答。时钟滴答数用数据类型clock_t表示。clock_t类型一般是32位整数类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值