Interlocked:为多个线程共享的变量提供原子操作。
Interlocked: 是一个静态类,不能够被实例化。
内部有许多方法,有兴趣的小伙伴可以看一下微软的官方文档,连接 >> :Interlocked
一般的变量自增如: i++,不是线程安全的,它的操作包括从内从中内存获取一个值,然后给该值递增1,再将他存回内存中。这样的操作可能会被线程调度器打断。Interlocked 类 提供了线程安全的方式递增,递减,交换和读取值的方法。
与其他同步技术相比,使用 Interlocked 类会快很多,但是,他只能用于简单的同步问题。
Dome:
static void Main(string[] args)
{
Thread t1 = new Thread(() => {
for (int i = 0; i < 100; i++)
{
//以原子操作的形式递增指定变量的值并存储结果
Interlocked.Increment(ref num);
}
});
Thread t2 = new Thread(() => {
for (int i = 0; i < 100; i++)
{
Interlocked.Increment(ref num);
}
});
t1.Start();
t2.Start();
Thread.Sleep(3000);//休眠3秒,确保两个线程执行完毕
Console.WriteLine(num);
Console.ReadKey();
}
输出结果:
Interlocked 对值类型有用,也可以对引用类型使用:
lock语句:
lock(this)
{
if(class==null)
{
class=NewClass;
}
}
改为原子操作:
Interlocked.CompareExchange<Class>(ref class, NewClass, null);
有兴趣深入研究的小伙伴可以参考这个博客:
https://www.cnblogs.com/Zachary-Fan/p/interlocked.html