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# 中的基本算术运算是原子的 的相关文章

  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 为什么派生类不使用基类的operator=(赋值运算符)?

    以下是实际问题的简化版本 而不是打电话Base operator int 代码似乎生成了一个临时的Derived对象并复制它 既然函数签名似乎完美匹配 为什么不使用基本赋值运算符 这个简化的示例没有显示任何不良影响 但原始代码在析构函数中有
  • 通过单个 GPIO 引脚转储闪存

    我正在使用 Infineon 的 XMC4500 Relax Kit 并尝试通过单个 GPIO 引脚提取固件 我非常天真的想法是通过 GPIO 引脚一次转储一位 然后用逻辑分析仪以某种方式 嗅探 数据 伪代码 while word by w
  • C 中的模仿函数重写

    具体来说 函数重写能够调用基本重写方法 这有两部分 一个是预编译的库代码 1 另一个是库的用户代码 2 我在这里实现了一个尽可能最小的经典 Person 和 Employee 示例 非常感谢了解 OOP 概念的铁杆 C 开发人员的回应 我正
  • 将成员函数作为参数传递/c++

    我想用 C 实现一个类b可以通过封装该迭代器类型的成员集进行某种迭代 喜欢 b object for each x do function f so 函数 f会得到每个人的x成员并做任何事情 比方说 void function f x me
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • 导出到 CSV 时 Gridview 出现空行

    这个问题是由进一步讨论引发的这个问题 https stackoverflow com questions 6674555 export gridview data into csv file 6674589 noredirect 1 com
  • c# 如何生成锦标赛括号 HTML 表

    所以我已经被这个问题困扰了三个星期 但我一生都无法弄清楚 我想做的是使用表格获得这种输出 演示 http www esl world net masters season6 hanover sc2 playoffs rankings htt
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 不要声明只读可变引用类型 - 为什么不呢?

    我一直在阅读这个问题 https stackoverflow com questions 2274412 immutable readonly reference types fxcop violation do not declare r
  • 如何在 C# 中使用 XmlDsigC14NTransform 类

    我正在尝试使用规范化 xml 节点System Security Cryptography Xml XMLDsigC14nTransformC net Framework 2 0 的类 该实例需要三种不同的输入类型 NodeList Str
  • C# 中处理 SQL 死锁的模式?

    我正在用 C 编写一个访问 SQL Server 2005 数据库的应用程序 该应用程序是数据库密集型的 即使我尝试优化所有访问 设置适当的索引等 我预计迟早会遇到死锁 我知道为什么会发生数据库死锁 但我怀疑我能否在某个时候发布不发生死锁的
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • 有没有更好的方法来获取每个项目与谓词匹配的子序列?

    假设我有一个 IEnumerable 例如 2 1 42 0 9 6 5 3 8 我需要获得与谓词匹配的项目的 运行 例如 如果我的谓词是 bool isSmallerThanSix int number 我想得到以下输出 2 1 0 5
  • 将 bignum 类型结构转换为人类可读字符串的有效方法是什么?

    我有一点问题 为了增长我的 C 知识 我决定尝试实现一个基本的 bigint 库 bigint 结构的核心将是一个 32 位整数数组 选择它们是因为它们适合寄存器 这将允许我在数字之间进行操作 这些操作将在 64 位整数中溢出 这也将适合寄
  • 如何使用 ASP.NET Web 表单从代码隐藏中访问更新面板内的文本框、标签

    我在更新面板中定义了一些控件 它们绑定到中继器控件 我需要根据匿名字段隐藏和显示用户名和国家 地区 但问题是我无法以编程方式访问更新面板中定义的控件 我如何访问这些控件 我也在网上查找但找不到很多参考资料 下面是来自aspx页面和 cs页面
  • 在何处将 CFLAG(例如 -std=gnu99)添加到 (Eclipse CDT) 自动工具项目中

    我有一个简单的 Autotools C 项目 不是 C 其框架是由 Eclipse CDT Juno 为我创建的 CFLAG 通过检查 似乎是 g O2 我希望所有生成的 make 文件也具有 std gnu99附加到 CFLAG 因为我使
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D

随机推荐

  • 如何让 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