我正在寻找 LWARX 和 STWCX 的等价物(在 PowerPC 处理器上找到)或在 x86 平台上实现类似功能的方法。此外,哪里是了解此类事情的最佳地点(即,用于锁定/无等待编程的好文章/网站/论坛)。
编辑
我想我可能需要提供更多细节,因为假设我只是在寻找 CAS(比较和交换)操作。我想要做的是实现一个无锁引用计数系统,它带有可以被多个线程访问和更改的智能指针。我基本上需要一种在 x86 处理器上实现以下功能的方法。
int* IncrementAndRetrieve(int **ptr)
{
整数值;
诠释 *pval;
做
{
// 获取指向值的指针
pval = *ptr;
// 如果为NULL,则返回NULL,智能指针
// 然后也将变为 NULL
如果(pval == NULL)
返回空值;
// 获取引用计数
val = lwarx(pval);
// 确保我们从中获取值的指针
// 仍然是 'ptr' 所指的同一个
如果(pval!= *ptr)
继续;
// 如果有其他线程,则通过 'stwcx' 增加引用计数
// 做了任何可能破坏的事情,那么它应该
//失败并重试
} while(!stwcx(pval, val + 1));
返回 pval;
}
我真的需要一些能够相当准确地模仿 LWARX 和 STWCX 的东西来实现这一点(我想不出一种方法来使用 CompareExchange、交换或添加我迄今为止为 x86 找到的函数)。
谢谢