如何在x86(Pentium及以上版本)上执行原子64b读取?

时间:2009-04-24 21:13:17

标签: c++ winapi x86 multicore atomic

我想在x86平台(Pentium或以上版本保证)上执行和原子读取64b对齐的64b数据。

有办法做到这一点吗? (不,我不想使用关键部分或互斥体,我希望这是无锁的。)

3 个答案:

答案 0 :(得分:6)

This page描述了如何做到这一点。基本上你只需要使用lock cmpxchg8b

答案 1 :(得分:4)

使用Interlocked操作,这里是一些示例代码:

LONGLONG AtomicRead(LONGLONG* p)
{
    return InterlockedCompareExchange64(p, 0, 0);
}

这将比较交换为零,如果已经等于零,则将p设置为零,它是一个noop。 InterlockedCompareExchange返回p。

指向的原始64位值

答案 2 :(得分:0)

使用Interlocked *()函数。

本身没有读取 - 但您可以在添加0的情况下发出Add()。