我有一个应用程序,我必须在多线程方法中增加一些统计计数器.递增必须是线程安全的,所以我决定使用gcc atomic builtins __sync_add_and_fetch()函数.为了了解它们的影响,我做了一些简单的性能测试,发现这些函数比简单的前/后递增慢得多.
这是我创建的测试程序:
#include <iostream>
#include <pthread.h>
#include <time.h>
using namespace std;
uint64_t diffTimes(struct timespec &start, struct timespec &end)
{
if(start.tv_sec == end.tv_sec)
{
return end.tv_nsec - start.tv_nsec;
}
else if(start.tv_sec < end.tv_sec)
{
uint64_t nsecs = (end.tv_sec - start.tv_sec) * 1000000000;
return nsecs + end.tv_nsec - start.tv_nsec;
}
else
{
// this is actually an error
return 0;
}
}
void outputResult(const char *msg, struct timespec &start, struct timespec &end, uint32_t numIterations, uint64_t val)
{
uint64_t …Run Code Online (Sandbox Code Playgroud)