前一段时间看了关于无锁map实现的相关技术,主要用到了cas,faa等。
如果你还不了解cas和faa可以去baidu一下。cas和faa之所以效率比锁要高,是因为他们利用了cpu的特征,在切换时不需要考虑内存上下文。
这里就产生了一种无锁map的实现思路,可以继承自stl的map,自己进行一层封装,通过cas技术来实现锁的机制,对封装后的插入,删除等操作使用通过cas实现的锁机制进行同步。
由于本人使用的vs2008,无法给出stl的cas实现(可以跨平台),现在给出windows下的实现。
#include "windows.h"
class CasLock
{
const long kLockedFlag__ = 1;
const long kUnlockFlag__ = 0;
void lock()
{
while (true)
{
if (InterlockedCompareExchange(lock_, kLockedFlag__, kUnlockFlag__) == kUnlockFlag__)
{
break;
}
Sleep(1);
}
}
void Unlock()
{
lock_ = kUnlockFlag__;
}
private:
/