多线程开启gprof性能测试的简易方法

用到gprof时才知道,原来gprof只能对主线程统计耗时。manual上也没写线程相关的问题啊?

不过有现成的解决方案:http://sam.zoy.org/writings/programming/gprof.html

该方案封装了pthread_create(), 让线程初始化执行一个setitimer(ITIMER_PROF, ...)。

简易的方法是直接在代码中写个setitimer()。

#include <sys/time.h>
#include <boost/thread.hpp>

struct itimerval g_itimer;

void foo()
{
    setitimer(ITIMER_PROF, &g_itimer, NULL);
    for (int i = 0; i < 10000000; i++)
        (void)i;
}

int main()
{
    getitimer(ITIMER_PROF, &g_itimer);
    boost::thread t(&foo);
    t.join();
    return 0;
}

g++ main.cpp -pg -lboost_thread

./a.out

gprof

这样就能统计出foo()的耗时了。没有setitimer()就不会有foo()的耗时统计。






  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值