Atomically increment two integers with CAS

后端 未结 3 697
深忆病人
深忆病人 2020-12-05 14:41

Apparently, it is possible to atomically increment two integers with compare-and-swap instructions. This talk claims that such an algorithm exists but it does not detail wha

3条回答
  •  萌比男神i
    2020-12-05 15:20

    Make me think of a sequence lock. Not very accurate (putting this from memory) but something along the lines of:

    let x,y and s be 64 bit integers.

    To increment:

    atomic s++ (I mean atomic increment using 64 bit CAS op)

    memory barrier
    atomic x++
    atomic y++
    atomic s++
    memory barrier
    

    To read:

    do {
        S1 = load s
        X = load x
        Y = load y
        memory barrier
        S2 = load s
    } while (S1 != S2)
    

    Also see https://en.wikipedia.org/wiki/Seqlock

提交回复
热议问题