这种快速原子锁实现可以工作吗?

时间:2010-07-13 00:57:54

标签: optimization locking atomic-swap

我有一个大型数据结构,它使用条带化来减少锁争用。现在我使用系统锁,但99.99%的时间,锁是无可争议的,而且持有锁的时间非常微小。但是,在保持锁定时会执行几个不同的存储器操作。实际上,与访问数据结构的总时间相比,获取和释放锁的时间非常重要。

所以我考虑用以下非常简单的锁来替换OS锁。此处仅显示尝试和解锁,因为99.99%的时间FastTryLock()将成功。这里的“pLock”变量表示条带结构中的细粒度锁。

我已经编写了以下实现,似乎工作正常,但如果正确或不正确,我将不胜感激。

bool FastTryLock(DWORD *pLock)
{
    if(0==AtomicXCHG(pLock,1)) {
        MemoryBarrier_LightWeight(); return(true);
    }
    return(false);
}
void FastUnlock(DWORD *pLock)
{
    MemoryBarrier_LightWeight(); *((volatile DWORD*)pLock)=0;
}

在PC上,MemoryBarrier_LightWeight()是一个无操作,因为CPU保证了内存写入顺序。

1 个答案:

答案 0 :(得分:1)

是的,这是一种名为spin lock的技术。但请注意,不能保证指向volatile的指针不符合标准。只需将锁变量声明为volatile