Я использую 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;
}
Я думаю, что первый метод в порядке (мне нужно подтверждение для этого)! Второй метод рассчитал тот же результат, но не проверенный в многопоточности, но он быстрее, второй подозрительно для меня, мне нужен совет от тех, кто у кого есть опыт.
Задача ещё не решена.
Других решений пока нет …