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

我有一个大型数据结构,使用条带化来减少锁争用。现在我使用系统锁,但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保证了内存写入顺序。     
已邀请:
是的,这是一种称为自旋锁的技术。但请注意,不能保证指向
volatile
的指针符合标准。只需将锁定变量声明为
volatile
即可。     

要回复问题请先登录注册