簡體   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