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

        }

输出结果:
在这里插入图片描述
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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值