我正在寻找 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 找到的函数)。
谢谢