易失性是否会阻止引入的读取或写入?

2023-12-25

In C#, volatile关键字确保读取和写入分别具有获取和释放语义。但是,它是否说明了有关引入的读取或写入的内容?

例如:

volatile Thing something;
volatile int aNumber;

void Method()
{
    // Are these lines...
    var local = something;
    if (local != null)
        local.DoThings();

    // ...guaranteed not to be transformed into these by compiler, jitter or processor?
    if (something != null)
        something.DoThings(); // <-- Second read!



    // Are these lines...
    if (aNumber == 0)
        aNumber = 1;

    // ...guaranteed not to be transformed into these by compiler, jitter or processor?
    var temp = aNumber;
    if (temp == 0)
        temp = 1;
    aNumber = temp; // <-- An out-of-thin-air write!
}

Here's what the C# spec1 has to say about Execution Order https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/basic-concepts#execution-order:

C# 程序的执行过程会在关键执行点保留每个执行线程的副作用。 A副作用被定义为对易失性字段的读取或写入...

执行环境可以自由更改 C# 程序的执行顺序,但受以下约束:

...

对于易失性读取和写入,保留了副作用的顺序......

我当然会考虑引入新的副作用改变副作用的顺序,但这里没有明确说明。


答案中的链接是 C# 6 规范,该规范被列为草案。 C# 5 规范不是草案,但无法在线获取,仅作为download https://www.microsoft.com/en-gb/download/details.aspx?id=7029。据我在本节中看到的,相同的措辞。

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

易失性是否会阻止引入的读取或写入? 的相关文章

  • 运行 t4 脚本作为 resx 文件的自定义工具

    我有一个资源文件MyResource resx 我想改变MyResource Designer cs文件生成 我有一个 t4 脚本 它接受 resx 文件作为输入并给出结果转换 但是 我必须手动运行此 t4 才能使其工作 我看到 resx
  • C语言中的递归是如何工作的?

    我试图了解 C 中递归的工作原理 任何人都可以给我解释控制流吗 include
  • 使用 C++ 拆分“[常规设置]”格式的节字符串

    我是 C 新手 我想读取包含部分和键值对的 ini 文件 根据部分 我想读取相应键的值 首先 我想阅读方括号内的部分 请帮忙 谢谢 对于真正的 INI 文件解析 我强烈建议iniparser库 http ndevilla free fr i
  • WP8.1 C# 绑定联系人图像

    信息很简单 我正在尝试创建一个可以显示用户联系人的应用程序 我也是一名自学成才的程序员 所以我在某些方面有编程经验 但总体来说我对数据绑定相对较新 首先 我有一个 ListView 控件 其中包含图像绑定
  • 每次调用新方法时触发事件

    我正在做一个logger for a c 应用程序需要记录每个方法被调用的时间以及每个方法执行时间 我可以通过调用自己的方法来做到这一点EventLogger LogMethodCall方法在每个方法的开头 但我想知道是否有办法使CLR每次
  • 在不使用 ncurses 的情况下用 C/C++ 编写“真正的”交互式终端程序,例如 vim、htop...

    不 我不想使用ncurses 因为我想了解如何 终端可以工作 并且我自己编程也很有趣 没有 必须是可移植的 它必须只能在基于 linux xterm 的终端仿真器上工作 我想做的是编写一个交互式终端应用程序 例如 htop 和 vim 我的
  • 如何使用boost库读取和写入.ini文件[重复]

    这个问题在这里已经有答案了 如何使用boost库读取和写入 或修改 ini文件 With Boost PropertyTree您可以读取并更新树 然后写入文件 请参阅load and save功能 看一下如何访问属性树中的数据 http w
  • 求一个数的因数。无法得到准确的结果

    有人可以帮助纠正我的算法吗 我已经对几个数字进行了测试 但它没有输出完整的因式分解 对于具有大量因子的数字 它完全失败 int num 20 for int i 2 i lt num i if num i 0 cout lt lt i lt
  • 读取STM32 MCU SPI数据寄存器的值

    有很多类似的问题 但似乎没有一个问题完全相同 我正在将 STML4 MCU 连接到 6 轴传感器 LSM6DS3 我已经成功地在 I2C 中实现了所有内容 但想要 SPI 的额外速度 和 DMA 如果我能让这些第一步工作起来的话 因此 第一
  • 本地主机上的 .net HTTP_X_FORWARDED_FOR NULL

    抱歉 如果其他地方已经回答了这个问题 我找不到它 如果没有 我会尝试查找访问过该站点的机器的原始 IP 根据我的基本理解 变量HTTP X FORWARDED FOR无论代理和其他过滤器如何 都会显示用户的 IP 如果这是真的 我正在尝试对
  • 函数参数评估顺序[重复]

    这个问题在这里已经有答案了 在 C 和 C 中 函数参数的求值是否有固定的顺序 我的意思是 标准怎么说 是吗left to right or right to left 我从书中得到的信息令人困惑 是否有必要function call应该使
  • C++ 错误:从“char”到“const char*”的转换无效

    我对 C 完全陌生 我创建了这个函数 bool guessWord string compWord cout lt lt Guess a letter string userLetter cin gt gt userLetter for u
  • 带双重检查锁的单例设计模式

    假设您有以下代码 1 为什么我们使用双重检查锁 为什么单锁不够好 请提供详细的例子 2 这种实施方式的主要缺点是什么 我该如何证明呢 Thanks public sealed class SomeSingleton5 private sta
  • ASP.NET MVC 中 ModelState.AddModelError 中的关键参数有什么意义?

    我在我的控制器中添加了验证检查来修改ModelState如果验证失败 例如 private bool ValidateMoney string raw string name decimal min decimal max try var
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • EWS - 给予预约,获取预约的所有者副本

    在 EWS 中进行预约后 是否可以获得所有者的副本 例如 如果我登录为user1 我有user1创建的约会的副本user2 我有冒充权 我要编辑user2预约的副本 我怎样才能获得user2 s copy 您可以使用 PidLidClean
  • 如何使用 xamarin 表单提示用户进行地理定位

    我正在 Xamarin Forms 应用程序中开发一个应用程序 需要请求地理位置权限 如果获得许可 它需要从设备获取地理位置数据 然后将地理位置坐标放入 Forecast io URL 我正在使用 James 的 Geolocator 插件
  • 未找到 _sqlite3_open 等符号错误

    您好 我收到此错误 Undefined symbols sqlite3 open referenced from main in ccRlWVer o sqliite3 close referenced from main in ccRlW
  • 清理堆分配对象的良好实践或约定?

    我正在学习C 我有 C C ObjC 背景 相当高级的语言 在 C 或 ObjC 上 作为函数或方法的结果返回堆分配的对象是很简单的 因为对象的清理是受管理的 按照惯例 会在适当的时候销毁 但我不知道在 C 中应该如何处理这个问题 例如 s
  • 如何在没有 Visual Studio 的情况下将新文件添加到 .csproj 文件

    如何添加新文件到 csproj从命令提示符 我认为没有任何工具可以响应命令行上的 add project 命令来执行此操作 但我认为您可以幸运地创建一个程序 脚本来直接操作 csproj 文件的 XML 内容 csproj 文件的结构如下所

随机推荐

  • 正则表达式从 URL 获取协议

    假设我有一个名为 URL 的变量 它的值是http www google com 我还可以通过 ftp 接收 URL 因此它是ftp ftp google com 我怎样才能拥有它 以便我在之前抓住一切 之后我将有一个 if else 条件
  • 在 QTreeWidget 中调用上下文菜单

    当用户单击 QTreeWidgetItem 中的对象时 我想弹出一个菜单 我想从 QWidget 捕获信号 contextMenuRequested 然后使用 itemAt 从视图中检索索引 但这看起来不太漂亮 有没有更简单的方法可以调用视
  • onMouseMove 获取鼠标位置[重复]

    这个问题在这里已经有答案了 在 Javascript 中 在 onMouseMove 的 Javascript 事件处理程序中 如何获取相对于页面顶部的 x y 坐标中的鼠标位置 如果你可以使用 jQuery 那么this http api
  • 如何创建 Helm Chart 以使用相同的 value.yaml 文件部署多个应用程序

    我正在尝试部署 一个 HTTPD 实例和一个使用相同内容的 couch 数据库实例values yaml file 是否有默认文档可以帮助我了解如何部署两个实例以及使用相同实例的服务values yaml file 有人拥有创建了多个部署和
  • Android 列表视图刷新

    在我的应用程序中 当用户单击 添加 菜单按钮时 会出现一个列表视图 其中填充了从文本文件加载的项目 所以现在用户可以向列表视图添加一项了 将其添加到数组后 新项目将写入文本文件 但不会进入列表视图 因为我想通过将文件读取到数组然后用它填充
  • 计算一周的计算机登录次数

    我可能在错误的地方问这个问题 也许我应该去操作系统论坛 但我仍然想知道这一点 我的工作使用的是 Windows 7 机器 我每天登录 做一些工作 然后注销 当我锁定 Windows L 我的笔记本电脑时 我会短暂休息一下 我必须考虑到本周末
  • 为什么 React Bootstrap Navbar 保持折叠状态?

    我遵循了 React Bootstrap 文档 尤其是这段代码来制作我的导航栏 gt https react bootstrap github io components navbar navbars mobile Friendly htt
  • 如何在android中以编程方式设置微调器的条目?

    我在 string xml 文件中创建了各种字符串数组 并且必须根据 Java 中的某些条件将不同的数组设置为微调器的条目 是否可能 或者数据库是这样做的唯一方法 提前致谢 您需要使用适配器并在 xml 文件中填充 tha 数组 在 xml
  • Web api 开放 oauth(DotNetOpenAuth) mvc 4

    mvc 4 互联网应用程序模板有一个令人惊叹的功能 可以轻松与 facebook twitter 和 google 集成 但web api模板中没有这样的功能 如何轻松集成DotNetOpenAuth使用网络 API 有教程吗 MVC 是一
  • 使用 python 从文本文件读取 - 第一行被遗漏

    我有一个名为 test 的文件 其内容为 a b c d e f g 我使用以下 python 代码逐行读取该文件并将其打印出来 with open test txt as x for line in x print x read 其结果是
  • 带有复选框的 Android 列表视图未按预期运行

    这是关于回收问题 我正在使用自定义适配器来填充列表视图 在自定义行中有一个图像视图 两个文本框和一个复选框 所有元素都已填充 但复选框未正确填充 在 的里面getView 我执行一个条件 如果条件为真 我将复选框设置为启用状态 这工作正常
  • Firebase google 登录身份验证 AppDelegate-使用未解析的标识符“isMFAEnabled”

    我是 iOS 开发新手 我正在尝试将谷歌登录添加到我的应用程序中 但我遇到了一些问题 代码显示一些 使用未解析的标识符 isMFAEnabled 和 类型 AppDelegate 的值没有成员 showTextInputPrompt 请帮助
  • 如何设置 SQL 连接字符串的查询超时

    我想从连接字符串设置查询超时 不是连接超时 有可能吗 不 这是每个命令 而不是每个连接 2013 年 5 月编辑 按照评论中的要求 SQLCommand CommandTimeout http msdn microsoft com en u
  • Apache Oltu Spring Security OAuth2 和 Google 集成

    参考资料纯粹取自以下网站 http syntx io integrating your java spring mvc webapp with facebook doing the oauth dance http syntx io int
  • 在 d3.geo MultiPoint 中,如何为不同的点提供不同的形状?

    我有一些 geoJson 数据 正在使用 d3 geo 绘制图表 当我写类似的东西时 d3 select svg attr d function d return path type MultiPoint coordinates get a
  • 密码哈希和加盐 - 这是一个好方法吗?

    我做了一些研究或谷歌搜索处理密码散列和加盐的不同方法 并发现了这个有趣的链接 http phix me salt https web archive org web 20090228183138 http phix me salt 现在 本
  • 在 Windows 机器上安装 ruby​​ gems 时出现“安装捆绑程序”错误

    我正在尝试安装 middleman 一个静态站点生成器 它使用 ruby gems 它能够构建所有本机扩展 但不能构建 wdm 我运行时收到以下错误消息install bundler我的命令提示符中的命令 Gem Ext BuildErro
  • 尽管宽度相同,集合视图网格最后一行的显示不同 - swift iOS

    我有一个固定的集合视图单元格 UICollectionView 网格 但底行中的单元格始终在屏幕上显示的宽度稍小 collectionViewLayout UICollectionViewLayout sizeForItemAt 中使用的框
  • Android BitmapFactory.decodeFile 间歇性返回 null

    我使用的是android 4 0 4 内核3 0 8 BitmapFactory decodeFile 有时会返回空位图 请注意 如果位图工厂无法加载位图 我会立即重试 最多 4 次 这通常有效 有很多人对此有所抱怨 大多数问题都有涉及位图
  • 易失性是否会阻止引入的读取或写入?

    In C volatile关键字确保读取和写入分别具有获取和释放语义 但是 它是否说明了有关引入的读取或写入的内容 例如 volatile Thing something volatile int aNumber void Method A