.NET 4 自旋锁

2024-04-20

以下测试代码 (F#) 未返回我期望的结果:

let safeCount() =
  let n = 1000000
  let counter = ref 0
  let spinlock = ref <| SpinLock(false)
  let run i0 i1 () =
    for i=i0 to i1-1 do
      let locked = ref false
      try
        (!spinlock).Enter locked
        if !locked then
          counter := !counter + 1
      finally
        if !locked then
          (!spinlock).Exit()
  let thread = System.Threading.Thread(run 0 (n/2))
  thread.Start()
  run (n/2) n ()
  thread.Join()
  !counter

我期望的是SpinLock互斥计数器,因此它返回 1,000,000 的计数,但相反,它返回较小的值,就好像没有发生互斥一样。

任何想法有什么问题吗?


SpinLock 结构被复制的原因是!是一个函数:当作为参数传递给函数或从函数返回时(或任何其他类型的赋值),结构会被复制。但是,如果您访问contents直接引用单元格,不进行复制。

let safeCount() =
  let n = 1000000
  let counter = ref 0
  let spinlock = ref <| SpinLock(false)
  let run i0 i1 () =
    for i=i0 to i1-1 do
      let locked = ref false
      try
        spinlock.contents.Enter locked
        if !locked then
          counter := !counter + 1
      finally
        if !locked then
          spinlock.contents.Exit()
  let thread = System.Threading.Thread(run 0 (n/2))
  thread.Start()
  run (n/2) n ()
  thread.Join()
  !counter
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 4 自旋锁 的相关文章

  • 将小数格式化为两位或整数

    对于 10 我想要 10 而不是 10 00 对于 10 11 我想要 10 11 没有代码可以实现吗 即通过指定格式字符串类似于 0 N2 decimal num 10 11M Console WriteLine num ToString
  • 具有多种类型的 C# 泛型类型推断

    我有以下通用方法 用于将一种类型的输入对象序列化为超类型 如下所示 public string SerialiseAs
  • 有没有类似 ActiveRecord::Migration for .NET 的东西?

    我玩过 ruby on Rails ActiveRecord Migration类 我喜欢保持数据库模式版本化是多么容易 我想在我的 ASP NET 项目中做类似的事情 我想知道是否有人听说过一个可以执行以下操作的工具ActiveRecor
  • 为什么 Roslyn 中有这么多对象池的实现?

    The 对象池 http source roslyn codeplex com Microsoft CodeAnalysis ObjectPool 25601 cs 20b9a041fb2d5b00是 Roslyn C 编译器中使用的一种类
  • 为单个方法引用大 DLL

    我想在 C 中使用大型类库 dll 中的单个方法 是否有性能或其他方面的缺点 我应该使用反射工具 读取 方法代码并将其复制粘贴到我的项目中吗 更新 硬盘空间不是问题 我的应用程序是网络应用程序 是否有性能或其他方面的缺点 唯一真正重要的是可
  • 专家 C#/.Net/WPF 开发人员应该了解哪些知识? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • lambda 表达式是多线程的吗?

    lambda 表达式是多线程的吗 假设当你将数学公式编写为 lambda 方法时 当你将其传递给另一个方法时 它会是多线程的吗 不是100 清楚你问的是什么 您是否想问 lambda 是否自然地在不同的线程上运行 如果是这样 则它们只是 S
  • 使用 wmi 获取活动会话(Win32_LogonSession 还返回非活动/旧会话)

    有没有办法只显示 wmi 的活动会话 问题是 Win32 LogonSession 还显示不活动 断开连接的会话 ManagementScope scope new ManagementScope ManagementPath Defaul
  • 是否可以使用.NET 跟踪文件操作?

    当以某种方式调用文件操作 例如打开或关闭 时 我是否可以在操作系统继续请求之前处理它 如果可能的话可以通过以下方式取消它 NET http en wikipedia org wiki NET Framework 如果 NET没有这样的能力
  • 何时使用 IComparable 与何时使用IComparer

    我正在尝试找出我需要实现哪些接口 他们本质上都做同样的事情 我什么时候会使用其中一种而不是另一种 好吧 他们不是quite与IComparer
  • web.config 转换为

    我有针对多个环境的 web config 转换 在配置文件中 我有一个 applicationSettings 部分 其中包含多个设置和值对 我尝试过根据用于匹配名称的语法并更改连接字符串以匹配设置并更改值 但转换失败 这是可能吗 所以我的
  • 将属性应用于返回值 - 在 F# 中

    在 C 中 可以将属性应用于方法的返回 return DynamicAttribute public object Xyz return new ExpandoObject 这在 F 中可能吗 背景 我想要一个用 F 编写的库的方法 该方法
  • 我如何移动粘性/捕捉 wpf 窗口

    当我移动 主 窗口时 我想移动两个或更多粘性窗口 我想做这样的事情 private void MainWindow PreviewMouseMove object sender MouseEventArgs e if e LeftButto
  • 学习实体框架[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • .NET 迭代器包装抛出 API

    我有一个带有 API 的类 它允许我请求对象 直到它抛出一个IndexOutOfBoundsException 我想将它包装到一个迭代器中 以便能够编写更清晰的代码 但是 我需要捕获异常以停止迭代 static IEnumerable It
  • FileInfo.BaseName 存在于 PowerShell 中,但不存在于直接 .NET 中

    为什么在 NET 中System IO FileInfo对象没有BaseName属性 但我可以通过 PowerShell 使用该属性 例如 FolderItems Get ChildItem Path C Where Object isno
  • C# 中单个 & 符号的第二个含义是什么?

    我在 C 中使用了单个与号 来表示 检查second条件语句即使第一个是false 但以下似乎是不同的意思 of 总而言之 谁能解释一下如何i 1在下面的例子中有效吗 List
  • 如何打开实际上已关闭的 Wifi 适配器的无线电?

    我在用着托管无线网络 http managedwifi codeplex com获取我的 Wifi 适配器的无线电状态 如果收音机实际上已关闭 如何将其打开 像这样的东西 WlanClient wlanClient new WlanClie
  • Async.StartChild是否存在内存泄漏?

    当我运行以下测试 使用 F 2 0 构建 时 我得到 OutOfMemoryException 在我的系统上大约需要 5 分钟才能达到异常 如果它作为 x86 进程运行 则为 i7 920 6gb ram 但无论如何我们都可以在任务管理器中
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互

随机推荐

  • locationServicesEnabled 始终返回 YES

    我测试了我的设备 iPod Touch 2G iOS 4 1 是否启用了位置服务 permitted locationManager locationServicesEnabled 无论是否启用定位服务 我总是得到 是 我说的是位置服务的通
  • 当我在设备中运行应用程序时,dyld`gdb_image_notifier 异常

    当尝试在设备上加载我的应用程序时 有时我会遇到以下情况 例外 dyld gdb image notifier 0x2beca0cc bx lr 但停止并再次运行后一切正常 任何人都可以告诉我为什么会发生这种情况 基本上 调试器中似乎有一个断
  • Python 的 join() 不会连接我的对象的字符串表示形式 (__str__)

    我不确定我在这里做错了什么 gt gt gt class Stringy object def str self return taco def repr self return taco gt gt gt lunch Stringy gt
  • 带有可运行对象和结果的 FutureTask

    我用谷歌搜索了这个 但仍然无法得到充分的理解 我找不到任何使用的特定示例FutureTask Runnable runnable V result 构造函数 Java 文档说 未来提交 可运行任务 T结果 提交一个 Runnable 任务来
  • 如果最后一个地址是 0xFFFFFFFF,如何获取数组末尾之后的地址?

    如果将地址放在数组末尾是合法的 那么如果数组地址的最后一个元素是 我该怎么做0xFFFFFFFF 这段代码将如何工作 for vector
  • 将标准输出重定向到文件

    我正在尝试执行相当于 bash 命令的操作ls gt foo txt in C 下面的代码将输出重定向到变量 include
  • 使用 Perl 搜索并替换文件中的特定字符串[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Perl 中替换现有文件中的字符串 https stackoverflow com questions 6994947 how to replace a string in an existi
  • 使用变量访问 JSON 值

    我正在尝试使用 jQuery 访问 JSON 数据并根据变量获取一组特定的值 我在使用 之前已经这样做过 但由于某种原因我无法弄清楚这次出了什么问题 我的 JSON 文件 由 getJSON 读取 并命名为 jsonmaker php 如下
  • 使用 swagger 或任何其他工具生成 Rest API 文档

    我正在寻找一种方法来记录我的 Rest API 我的服务器是 Tomcat Spring 服务器 Rest API 是使用 Jenkins 实现的 Swagger 似乎是一个非常酷的解决方案 但我不知道如何在我的代码中使用它 我正在寻找创建
  • Ecto 和 Elixir 的默认日期时间

    我今天刚刚开始使用 Elixir 和 Phoenix 我正在尝试添加 Ecto 作为映射器 但我在使用时间时遇到了一些问题 这是我的模型 schema users do field name string field email strin
  • Python 字符串不是不可变的吗?那为什么a + " " + b 会起作用呢?

    我的理解是 Python 字符串是不可变的 我尝试了以下代码 a Dog b eats c treats print a b c Dog eats treats print a b c Dog eats treats print a Dog
  • 在现有数据表中添加按顺序编号的新列的最佳方法

    我有一个非空数据表 添加另一列 从 1 开始按顺序编号 的最佳方法是什么 我尝试了以下代码 但没有成功 DataColumn dc new DataColumn Col1 dc AutoIncrement true dc AutoIncre
  • DIV 高度设置为屏幕百分比?

    我希望将父 DIV 设置为 100 屏幕高度的 70 我已经设置了以下 CSS 但它似乎没有做任何事情 body font family Noto Sans sans serif margin 0 auto height 100 width
  • 重载运算符 == 与 Equals()

    我正在开发一个 C 项目 到目前为止 我已经使用不可变对象和工厂来确保类型的对象Foo总是可以比较是否相等 Foo对象一旦创建就无法更改 并且工厂始终为给定的参数集返回相同的对象 这非常有效 并且在整个代码库中我们假设 始终致力于检查相等性
  • postgresql - 将布尔列添加到表集默认值

    这是正确的 postgresql 语法 可以将列添加到表中 默认值为false ALTER TABLE users ADD priv user BIT ALTER priv user SET DEFAULT 0 Thanks ALTER T
  • 突变观察者可以监听“数据”属性的变化吗?

    所以问题是我有一个 html 元素 它在 data 属性中有一个对象 通过 jQuery ofc 设置 并且我想监听该属性的更改 我已经尝试了很多事情 比如在MutationObserverInit 对象 https developer m
  • 什么时候使用 git rm -f ?

    我正在学习 Git 无法理解在发出 git rm 命令时使用 f 标志的条件 请解释一下需要 rm f 而不是仅 rm 的情况 解释 The f如果文件与您上次签出的提交不是最新的 则用于删除该文件 这是为了防止您删除已进行更改但尚未签入的
  • Javascript,如何读取本地文件?

    我尝试从服务器读取本地文件 我已经 谷歌 这个话题有一段时间了 有些人说这是不可能的 有些人说这是可以做到的 在搜索过程中我发现了这个脚本 使用 xmlhttprequest 读取文件 如果您的 javascript 应用程序的 HTML
  • 如何在 jQuery keyup 事件中实现 debounce fn?

    计算基于用户输入 标准是使用keyup而不是change or blur 问题是代码在每次击键时都会触发 而我需要它在 500 毫秒超时后仅延迟并触发一次 我下面的例子显然不起作用 附加了小提琴 我找到了大卫 沃尔什的dbounce功能 但
  • .NET 4 自旋锁

    以下测试代码 F 未返回我期望的结果 let safeCount let n 1000000 let counter ref 0 let spinlock ref lt SpinLock false let run i0 i1 for i