我在我的应用程序中使用 InterlockedIncrement64 进行原子增量以确保它是线程安全的,我的代码只需要基于 c 运行时库,我决定使用原子类我编写了以下 2 个方法
#include "stdafx.h"
#include <iostream>
#include <atomic>
#include "time.h"
using namespace std;
void InterLockedIncrement64(int64_t* input)
{
/*static*/ atomic<int64_t> ato(*input);
//ato.store(*input);
ato.fetch_add(1);
*input = ato.load();
}
void InterlockedIncrement64_(int64_t* input)
{
atomic<int64_t> *atomicData = reinterpret_cast<atomic<int64_t>*>(input);
atomicData->fetch_add(1);
}
int _tmain(int argc, _TCHAR* argv[])
{
int64_t count = 0;
int64_t count_ = 0;
while (true)
{
clock_t c = clock();
for (int i = 0; i < 1000001; i++)
{
InterlockedIncrement64_(&count_);
}
uint32_t time1 = clock() - c;
c = clock();
for (int i = 0; i < 1000001; i++)
{
InterLockedIncrement64(&count);
}
uint32_t time2 = clock() - c;
cout << "Time 1 = " << time1 << endl;
cout << "Time 2 = " << time2 << endl;
char in = cin.get();
if(in == 'c')
{
break;
}
}
system("pause");
return 0;
}
我认为第一种方法很好(我需要对此进行确认)!,第二种方法计算出相同的结果,但未在多线程中进行测试,但速度更快,第二种方法对我来说很可疑,我需要那些人的建议谁有经验。