假设比较并交换(或CAS)从来没有失败不合逻辑,可CompareExchange与中科院实施?比较交换可以使用CompareAndSwap实现吗?
CompareExchange两者取指针,预期值,并且新的值和设置原子由指针参考的新值存储,如果它的预期值相匹配。两者之间的区别是,CompareExchange返回的存储器区域的前一值和比较并交换返回一个布尔值指示成功或失败。
这是琐碎CompareExchange实现CAS:
int CompareExchange (int* p, int expected, int newvalue);
bool CAS (int* p, int expected, int newvalue)
{
return CompareExchange (p, expected, newvalue) != expected;
}
...但有可能与CAS实现CompareExchange?我见过的所有尝试都有竞争条件或不保证无锁性质。我不相信这是可能的。
我们在这里思考的是,我不认为有可能在没有竞争条件的情况下无锁地确定* p。 – 2010-03-17 21:51:27