C# 中的基本算术运算是原子的

2023-12-10

基本算术运算是线程安全的吗?

例如,如果有++对全局变量的操作,会被不同线程修改,是否有必要在它周围加锁?

例如

void MyThread() // can have many running instances
{
    aGlobal++;
}

或者应该是

void MyThread()
{
    lock( lockerObj)
    {
        aGlobal++;
    }
}

The spec总结得很好。第 5.5 节,“变量引用的原子性”:

以下数据类型的读取和写入是原子的:bool、char、 byte、sbyte、short、ushort、uint、int、float 和引用类型。在 另外,读取和写入具有基础类型的枚举类型 前面的列表也是原子的。读取和写入其他类型, 包括long、ulong、double、decimal以及用户自定义 类型,不保证是原子的。除了图书馆 为此目的而设计的函数,不能保证原子性 读-修改-写,例如递增或递减的情况。

结论:

  • 独立读/写是原子的(但仅适用于某些数据类型)
  • 读/修改/写(如i++) is never atomic
  • 您可以使用Interlocked当尚未保证原子性时,类方法可以实现原子性

在以下情况下Interlocked功能还不够,除了使用同步原语之外没有其他选择,例如Monitor.Enter(编译器还通过lock陈述)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的基本算术运算是原子的 的相关文章

随机推荐

  • 如何让 Django 在 AWS S3 上将某些文件设为公开,将媒体文件设为私有(无 403 错误)?

    我在用着boto3 and Django 存储在我的 Django 应用程序中提供来自 AWS S3 的文件 我希望我的静态文件是公开的 但其他文件是私有的 我已经有点工作但不完全 我的静态文件就像私有文件一样使用预签名密钥 在我的模板文件
  • 将命名列表传递给 cols_only() [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 当我尝试做这样的事情时 data lt read csv blah csv n max 100 col types cols only list files c Error Some co
  • 为什么这个错误类型“String”不是类型“Map ”的子类型

    已经处于这种情况很长一段时间了 但没有解决该错误 String 不是 Map 类型的子类型 提出了很多相关问题也希望得到帮助 这是我的课程 class Provider Provider required this id required
  • 如何使用脚本生成 INTERVAL 1

    我们正在尝试找到一种语法来从日期函数的第三个参数生成 DAY WEEK MONTH 选项 DECLARE var date option STRING DEFAULT DAY select GENERATE DATE ARRAY 2019
  • 使用 Plupload HTML5 运行时直接上传到 Amazon S3 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我在之前的一篇文章中看到过如何让 Plupload 直接上传到 Amazon S
  • PHPUnit 模拟对象和静态方法

    我正在寻找测试以下静态方法的最佳方法 特别是使用 Doctrine 模型 class Model User extends Doctrine Record public static function create userData new
  • 模态弹出窗口在打开时淡入,在关闭时淡出

    我有一个相当简单的问题 我有删除按钮 可以打开模式弹出窗口以确认或拒绝删除 我希望这些模式弹出窗口在单击时淡入 在取消时淡出 我已经尝试了几种不同的方法 到目前为止还没有运气 我只需要一个简单的解决方案 提前致谢 这是我的代码
  • Google Play 应用签名和即时应用

    相当直接的问题 有人知道 Google Play 应用签名是否支持即时应用吗 我问的原因是 输入应用程序的签名配置 或选择密钥库文件 虽然可以在测试期间使用调试配置或密钥库 但生成的数字资产链接文件将与应用程序的发布版本不兼容 如果您确实上
  • 从 MVC 控制器创建/获取 DefaultHtmlGenerator

    我正在尝试在 MVC6 控制器方法内为 Microsoft AspNet Mvc Rendering DefaultHtmlGenerator 创建 或以某种方式获取它的实例 我想在我的 asp net mvc 控制器中生成用于验证我的模型
  • 生成正则表达式可以在 Python 中匹配的值列表

    我尝试使用正则表达式作为输入 并从那里生成正则表达式匹配的所有可能值 因此 例如 如果正则表达式是 以 a 开头 以 c 结尾的三个字母单词 则代码将生成一个包含值 aac abc acc adc a1c 的列表 是否有捷径可寻 我正在使用
  • 在Google云机器学习上部署Retrained inception模型

    我设法使用通用初始模型重新训练我的特定分类模型tutorial 我现在想将其部署在谷歌云机器学习上steps 我已经设法将其导出为 MetaGraph 但我无法获得正确的输入和输出 在本地使用它 我的图表入口点是DecodeJpeg con
  • OpenXML Sax 方法可将 100K+ 行快速导出到 Excel

    我一直在尝试提高写入 xlsx 的 SAX 方法的性能 我知道 Excel 中的行数限制为 1048576 行 我只达到过这个极限几次 在大多数情况下 我只写出大约 125K 到 250K 行 一个大数据集 我尝试过的代码似乎没有那么快 因
  • 如何过滤 top_hits 指标聚合结果 [Elasticsearch]

    我想按地址分组 然后按日期获取最新地址 然后按状态过滤此结果 ex address A date 10 10 1991 status sold address A date 10 10 2016 status active address
  • 外连接 Pandas 数据框

    我正在尝试外部连接 在 df1 上 两个 pandas 数据框 以下是示例数据框 df1 Index Team 1 Team 2 Team1 Score Team2 Score 0 A B 25 56 1 B C 30 55 2 D E 3
  • 向图例添加额外的项目

    我有以下数据 trait beta se p analysis signif trait1 0 078 0 01 9 00E 13 group1 1 trait2 0 076 0 01 1 70E 11 group1 1 trait3 0
  • Amazon Cognito 将 IAM 角色分配给用户池中的组并与身份池集成

    我正在尝试使用用户池中新添加的用户组并将其与联合身份集成 我按照以下步骤操作 在用户池中创建组 其中在 IAM 中创建的角色具有单独的角色 政策 创建用户并将其添加到用户组 创建一个身份池并在下面添加该 Cognito 提供程序身份验证提供
  • 使用异步解析 Json url

    运行此代码时出现异常 我想解析 url 它是一个 json 对象数组 package com example compsci 734t import java io BufferedReader import java io InputSt
  • C# 中的随机名称生成器

    我有一个女性和男性名字的列表 然后是数组中的姓氏列表 我想做的是使用随机生成器获取这些数组中的这些名称 并根据我的调用输出随机的名字和姓氏 完成后 我将在其他类中引用该方法 而不必每次都将其写出来 这是我到目前为止的代码 private v
  • 在 PrimeFaces 中将图标从 jQuery UI 更改为 FontAwesome

    我有一个 PrimeFacesp tree我可以使用添加字体很棒的展开和折叠图标this 但之前有一个来自 PrimeFaces 的箭头图标 我无法弄清楚如何将其切换为很棒的箭头字体 fa arrow circle down and fa
  • C# 中的基本算术运算是原子的

    基本算术运算是线程安全的吗 例如 如果有 对全局变量的操作 会被不同线程修改 是否有必要在它周围加锁 例如 void MyThread can have many running instances aGlobal 或者应该是 void M