这种快速原子锁实现可以工作吗?
我有一个大型数据结构,使用条带化来减少锁争用。现在我使用系统锁,但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 个回复
骇毖煽洁铂
的指针符合标准。只需将锁定变量声明为
即可。