Interlocked.CompareExchange 单线程等效代码

布隆达尔

我不知道为什么,但我似乎无法完全理解Interlocked.CompareExchange(ref int a, int b, int c).

如果它只是在单线程环境中天真地实现,有人可以告诉我它会做什么吗?

即它用“做那个......但是作为一个原子的、线程安全的操作”来代替什么代码?

飞狗57

这是我对代码的理解(在单线程领域):

static int CompareExchange(ref int location1, int value, int comparand)
{
    var valueToReturn = location1;
    if (location1 == comparand)
    {
        location1 = value;
    }

    return valueToReturn;
}

取自此处的文档:https : //docs.microsoft.com/en-us/dotnet/api/system.threading.interlocked.compareexchange

参数

  • location1 (Int32)
    目的地,其值与 comparand 进行比较并可能被替换。
  • value (Int32)
    如果比较结果相等,则替换目标值的值。
  • comparand (Int32)
    与位置 1 处的值进行比较的值。
  • 返回 (Int32)
    location1 中的原始值。

评论

如果 comparand 和 location1 中的值相等,则 value 存储在 location1 中。否则,不执行任何操作。比较和交换操作作为原子操作执行。无论是否发生交换,CompareExchange 的返回值都是 location1 中的原始值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章