目录
1:Add 对两个整数进行求和并用和替换第一个整数,上述操作作为一个原子操作完成
2:Exchange Exchange(UInt32, UInt32) 以原子操作的形式,将 32 位无符号整数设置为指定的值并返回原始值。
参考文档:Interlocked 类 (System.Threading) | Microsoft Learn
我对Interlocked原子操作的理解是:如同一桌人喝一碗汤,汤碗里面有一个公用的勺子,不能多个人同时使这把公用的勺子舀汤, 当有人想喝汤时(或者服务员想要加汤时),就得先拿到勺子,其他人就没法喝汤(或者添汤)。只有喝汤的人(添汤的人)用完勺子放回汤碗后,其他人才能继续使用勺子喝汤(添汤)。
注解
此类的方法可帮助防止在以下情况下发生的错误:在以下情况下发生:计划程序在以下情况下切换上下文:当线程正在更新可被其他线程访问的变量时,或当两个线程同时在不同的处理器上执行时。 此类的成员不会引发异常。
Increment和 Decrement 方法递增或递减变量,并在单个操作中存储生成的值。 在大多数计算机上,递增变量不是原子操作,需要执行以下步骤:
-
将实例变量中的值加载到寄存器中。
-
递增或减小值。
-
将值存储在实例变量中。
如果不使用 Increment 和,则在 Decrement 执行前两个步骤后,线程可以被抢占。 然后,另一个线程可以执行所有三个步骤。 当第一个线程继续执行时,它将覆盖实例变量中的值,并且由第二个线程执行的增量或减量的影响将丢失。
Add方法以原子方式将整数值添加到整数变量中,并返回变量的新值。
Exchange方法以原子方式交换指定变量的值。 CompareExchange方法组合了两个操作:比较两个值,并根据比较结果将第三个值存储在一个变量中。 比较和交换操作以原子操作的方式执行。
确保对共享变量的任何写入或读取访问都是原子的。 否则,数据可能已损坏,或者加载的值可能不正确。
方法
Add(Int32, Int32) | 对两个 32 位整数进行求和并用和替换第一个整数,上述操作作为一个原子操作完成。 |
Add(Int64, Int64) | 对两个 64 位整数进行求和并用和替换第一个整数,上述操作作为一个原子操作完成。 |
Add(UInt32, UInt32) | 对两个 32 位无符号整数进行求和并用和替换第一个整数,上述操作作为一个原子操作完成。 |
Add(UInt64, UInt64) | 对两个 64 位无符号整数进行求和并用和替换第一个整数,上述操作作为一个原子操作完成。 |
And(Int32, Int32) | 对两个 32 位带符号整数进行按位“与”运算,并用结果替换第一个整数,上述操作作为一个原子操作完成。 |
And(Int64, Int64) | 对两个 64 位带符号整数进行按位“与”运算,并用结果替换第一个整数,上述操作作为一个原子操作完成。 |