【发布时间】:2012-04-11 13:14:58
【问题描述】:
我正在尝试测量 gcc 线程在我的系统上的执行情况。我写了一些非常简单的测量代码,就像这样......
start = clock();
for(int i=0; i < thread_iters; i++) {
pthread_mutex_lock(dataMutex);
data++;
pthread_mutex_unlock(dataMutex);
}
end = clock();
我通过 CLOCKS_PER_SEC 执行通常的减法和除法运算,以获得 100000000 次迭代的大约 2 秒的经过时间。然后我稍微更改分析代码,以便测量每个 mutex_lock/unlock 调用的单独时间。
for(int i=0; i < thread_iters; i++) {
start1 = clock();
pthread_mutex_lock(dataMutex);
end1 = clock();
lock_time+=(end1-start1);
data++;
start2 = clock();
pthread_mutex_unlock(dataMutex);
end2 = clock();
unlock_time+=(end2-start2)
}
相同次数的迭代次数是 锁定:~27 秒 解锁:~27 秒
我明白为什么程序的总时间增加了,循环中的计时器调用次数增加了。但是系统调用的时间仍然应该少于 2 秒。有人可以帮我弄清楚我哪里出错了吗?谢谢!
【问题讨论】:
标签: c++