前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[c#] Interlocked.Increment 以原子操作的形式递增指定变量的值并存储结果

[c#] Interlocked.Increment 以原子操作的形式递增指定变量的值并存储结果

作者头像
科控物联
发布2022-12-01 10:15:31
1.5K0
发布2022-12-01 10:15:31
举报
文章被收录于专栏:科控自动化科控自动化

Interlocked 类

为多个线程共享的变量提供原子操作。

使用 Interlocked 类,可以在不阻塞线程(lock、Monitor)的情况下,避免竞争条件。

Interlocked 类是静态类,让我们先来看看 Interlocked 的常用方法:

方法

作用

CompareExchange()

比较两个数是否相等,如果相等,则替换第一个值。

Decrement()

以原子操作的形式递减指定变量的值并存储结果。

Exchange()

以原子操作的形式,设置为指定的值并返回原始值。

Increment()

以原子操作的形式递增指定变量的值并存储结果。

Add()

对两个数进行求和并用和替换第一个整数,上述操作作为一个原子操作完成。

Read()

返回一个以原子操作形式加载的值。

简单测试一下:简单的自增运算。

代码语言:javascript
复制
static void Main(string[] args)
{
  sum = 0;
  for (int i = 0; i < 5; i++)
  {
    Task.Run(AddOne);
  }
  Thread.Sleep(TimeSpan.FromSeconds(2));
  Console.WriteLine("sum = " + sum);
  sumLock = 0;
    for (int i = 0; i < 5; i++)
    {
      Task.Run( AddOneLock);
    }
  Thread.Sleep(TimeSpan.FromSeconds(2));
  Console.WriteLine("sumLock = " + sumLock);
}
private static int sum = 0;
private static int sumLock = 0;
public static void AddOne()
{
  for (int i = 0; i < 100_0000; i++)
  {
    sum += 1;
  }
}
public static void AddOneLock()
{
  for (int i = 0; i < 100_0000; i++)
  {       //sum += 1;
    Interlocked.Increment(ref sumLock);//以原子操作的形式递增指定变量的值并存储结果。
  }
}

Interlocked 类 (System.Threading) | Microsoft Learn

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科控物联 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Interlocked 类
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档