C#之:线程同步 Interlocked类

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();

        }

输出结果:
C#之:线程同步 Interlocked类_第1张图片
Interlocked 对值类型有用,也可以对引用类型使用:

lock语句:

lock(this)
{
	if(class==null)
	{
		class=NewClass;
	}
}

改为原子操作:

Interlocked.CompareExchange(ref class, NewClass, null);

有兴趣深入研究的小伙伴可以参考这个博客:
https://www.cnblogs.com/Zachary-Fan/p/interlocked.html

你可能感兴趣的:(C#,多线程,并行和异步,c#,多线程)