using System;
class Program
{
static void Main()
{
int value = 0;
// 使用 Interlocked.Increment 来确保线程安全地增加 value 的值
Interlocked.Increment(ref value);
Console.WriteLine($"Incremented value: {value}");
// 使用 Interlocked.Add 来确保线程安全地增加 value 的值
Interlocked.Add(ref value, 5);
Console.WriteLine($"Added value: {value}");
// 使用 Interlocked.Exchange 来确保线程安全地交换 value 的值
int oldValue = Interlocked.Exchange(ref value, 10);
Console.WriteLine($"Exchanged old value: {oldValue}, new value: {value}");
// 使用 Interlocked.CompareExchange 来确保线程安全地条件交换 value 的值
int expected = 10;
int newValue = 20;
int result = Interlocked.CompareExchange(ref value, newValue, expected);
Console.WriteLine($"CompareExchange result: {result}, new value: {value}");
}
}
Interlocked
类提供了一组静态方法,用于对多个线程共享的变量执行原子操作。这些方法可以确保在多线程环境下,对变量的操作是线程安全的。
Interlocked.Increment(ref int location)
: 对指定位置的整数值进行原子递增操作。Interlocked.Add(ref int location, int value)
: 对指定位置的整数值进行原子加法操作。Interlocked.Exchange(ref int location, int value)
: 对指定位置的整数值进行原子交换操作,返回旧值。Interlocked.CompareExchange(ref int location, int value, int comparand)
: 对指定位置的整数值进行原子比较和交换操作,只有当当前位置的值等于给定的比较值时,才会用新值替换当前位置的值,并返回旧值。这些方法确保了在多线程环境中,对共享变量的操作不会发生竞争条件(race condition),从而保证了程序的正确性。
上一篇:c# mongodb
下一篇:c# 开发
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站