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

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(使用前将#替换为@)

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

  • 将 SQL Server varBinary 数据转换为字符串 C#

    我需要帮助弄清楚如何转换来自SQL服务器表列设置为varBinary 最大 转换为字符串以便将其显示在标签中 这是在C 我正在使用数据读取器 我可以使用以下方式提取数据 var BinaryString reader 1 我知道该列包含之前
  • 从 C 中的 char* 获取单个字符

    有没有办法在 C 中逐字符遍历或从 char 中提取单个字符 考虑以下代码 现在获得单个角色的最佳方式是什么 建议我一种不使用任何字符串函数的方法 char a STRING 其他方式 char i for i a i i i points
  • 如何重命名序列化对象列表后生成的 XML 属性

    我正在序列化对象列表List
  • binary_log_types.h:没有这样的文件或目录

    我正在编译一个小型 mysql C 项目并且 遇到以下错误 C Program Files x86 MySQL MySQL Server 5 7 include mysql com h 22 30 fatal error binary lo
  • 使用空函数调用 hana::is_valid 的用途是什么?

    Boost Hana https www boost org doc libs 1 61 0 libs hana doc html index html offers boost hana is valid https www boost
  • 在 C# 中轻松创建支持索引的属性

    在 C 中我发现索引属性 http msdn microsoft com en us library aa288464 VS 71 aspx非常有用 例如 var myObj new MyClass myObj 42 hello Conso
  • C# 并行与并行线程代码性能

    我一直在测试 System Threading Parallel 与线程的性能 我很惊讶地发现并行比线程花费更长的时间来完成任务 我确信这是由于我对并行的了解有限 我刚刚开始阅读 我想我会分享一些片段 如果有人可以向我指出并行代码比线程代码
  • 当 f & g 修改同一个全局变量时,表达式 f() > g() 的值是否未定义或未指定?

    UPDATE 由用户标记ecatmur 它是重复的在 C99 中 f g 是未定义还是只是未指定 https stackoverflow com questions 3951017 in c99 is fg undefined or mer
  • 增量决策树 C++ 实现

    有谁知道决策树分类器的增量实现吗 这样 当您将新实例添加到训练集中时 它可以根据现有决策树分类器以低计算量并尽可能快地生成最佳决策树分类器 换句话说 我有一个最优决策树分类器集A 其中命名为T 1 现在我想添加实例X to set A并找到
  • 多维数组和指向指针的指针

    创建多维数组时char a 10 10 根据我的书 它说你必须使用类似于char a 10 将数组传递给函数 为什么必须这样指定长度 您不是只是将双指针传递给 with 并且该双指针不是已经指向分配的内存吗 那么为什么参数不能是char a
  • 以编程方式运行 T4 文本模板

    有没有一种方法可以通过代码以编程方式运行 T4 文本模板 我正在制作一种自定义域特定语言 我希望相关的文本模板在用户每次保存时运行 目前 这就是我在 DSL 模型中所做的事情 protected override void OnDocume
  • 函数指针上的未知类型 F TYPE

    include
  • 从套接字读取 C HTTP

    我想知道如何判断是否已从套接字接收到所有数据 这是一个简单的网络代理 现在我正在处理请求部分 所以发送的内容应该以 r n r n 结尾 我不知道请求会持续多久 我在这里读过一些帖子 说我应该检查读取函数是否返回 0 但其他人说0只在客户端
  • EF Core 一对多关系列表返回 null

    我正在尝试学习如何在 EF Core 中正确利用 DbContext 我有一个团队课程 public class Team public int ID get set public string Name get set public bo
  • 为什么 httpRuntime targetFramework="4.5" 禁止抓取 .ASPXAUTH cookie?

    当我的 web config 具有以下 httpRuntime 时 我的控制器无法获取 cookie ASPXAUTH 它似乎能够获取任何其他 cookie 无论带或不带句点前缀 如果我删除下面的行 它就可以正常工作
  • C++:LPWSTR 在 cout 中打印为地址

    我有一个类型变量LPTSTR 我打印到std cout with lt lt 在 ANSI 系统中 不知道它是在哪里确定的 它工作得很好 它打印了字符串 现在 在 Unicode 系统中 我得到的是十六进制地址而不是字符串 那么 为什么LP
  • 生成范围 [min,max] 内的随机数 [重复]

    这个问题在这里已经有答案了 我正在使用 C 生成范围 min max 内的整数随机数 我在用 int random int int min int max return min rand max min 但我认为上面的代码适用于范围 min
  • 如何组合||条件语句中的运算符[重复]

    这个问题在这里已经有答案了 代替 if foo 1 foo 5 foo 9 我喜欢将它们组合起来 类似于以下内容 这不起作用 if foo 1 5 9 那可能吗 不幸的是不是 你最好的选择是创建一个扩展方法 public static bo
  • 在Framework 4.6项目中使用.net core DLL

    我已经在 net core 2 0 中构建了一个 DLL 现在我想在使用 net 4 6 1 框架的 WinForms 项目中使用它 我可以引用该 dll 但收到 System IO FileLoadException 表示找不到 Syst
  • 使用 MVC5、Ajax、C# 和 MSSQL Server 级联 DropdownList

    我对来自 Windows 窗体和三层架构的 MVC 非常陌生 我试图找出使用从数据库填充的级联下拉列表 DDL 我使用 MS SQL Server 2012 VS 2013 目前我正在研究用户调查问卷 用户可以从 DDL 的多个答案中进行选

随机推荐

  • 正则表达式从 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