0

我在我的应用程序中使用 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;
}

我认为第一种方法很好(我需要对此进行确认)!,第二种方法计算出相同的结果,但未在多线程中进行测试,但速度更快,第二种方法对我来说很可疑,我需要那些人的建议谁有经验。

4

0 回答 0