我正在编写一些实现(无符号)整数计数器的代码。
到目前为止,我提出的所有场景都会遇到溢出的竞争条件。是否可以使用这些约束来实现计数器?
答案 0 :(得分:5)
您可以通过比较和交换构建所有内容。一般算法是
int DoSomeAtomicCalculation()
{
static int value;
int capture, newValue;
do {
capture = value;
newValue = some_function_based_on(capture);
} while (!compare_and_swap(value, capture, newValue));
return newValue;
}
(我假设compare_and_swap
接受变量,比较值和交换值,如果比较成功(并且发生交换),则返回true
。