我想在x86平台(Pentium或以上版本保证)上执行和原子读取64b对齐的64b数据。
有办法做到这一点吗? (不,我不想使用关键部分或互斥体,我希望这是无锁的。)
答案 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()。