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

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

作者头像
科控物联
发布2022-12-01 10:15:31
发布2022-12-01 10:15:31
2.3K00
代码可运行
举报
文章被收录于专栏:科控自动化科控自动化
运行总次数:0
代码可运行

Interlocked 类

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

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

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

方法

作用

CompareExchange()

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

Decrement()

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

Exchange()

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

Increment()

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

Add()

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

Read()

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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 类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档