一个简单的指针增量分配器(他们有一个正式的名字吗?)我找了一个无锁算法。 这似乎微不足道,但我想获得SOEM反馈我implementaiton是否正确。
不是线程安全的实现:
byte * head; // current head of remaining buffer
byte * end; // end of remaining buffer
void * Alloc(size_t size)
{
if (end-head < size)
return 0; // allocation failure
void * result = head;
head += size;
return head;
}
我在一个线程安全的实现尝试:
void * Alloc(size_t size)
{
byte * current;
do
{
current = head;
if (end - current < size)
return 0; // allocation failure
} while (CMPXCHG(&head, current+size, current) != current));
return current;
}
其中CMPXCHG
是具有互锁比较交换(destination, exchangeValue, comparand)
的参数,并返回原来的值
对我来说很好 - 如果另一个线程获取电流和CMPXCHG之间分配,循环再次尝试。 任何意见?