繁体   English   中英

如何通过原子增量和比较交换操作处理整数溢出?

[英]How to handle integer overflows with atomic increment and compare-and-swap operations?

我正在编写一些实现(无符号)整数计数器的代码。

  1. 从任意数量的线程中使用它。
  2. 线程应该每次都获得唯一值,直到溢出为止。
  3. 如果整数类型范围溢出,则应返回零。
  4. 我可以使用原子增量函数(返回旧值)和原子比较和交换函数。

到目前为止,我提出的所有方案都遇到了溢出时的竞争状况。 是否可以在这些约束条件下实现计数器?

您可以通过比较和交换来构建所有内容。 通用算法是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM