监视器应该等待什么对象?

2024-03-28

使用 Monitor.Wait(object obj) 时,应该对 obj 使用什么?在这个article http://www.yoda.arachsys.com/csharp/threads/我正在阅读 .NET 中的多线程,作者实例化了一个新的 Object() 仅用作监视器锁。这是您在实践中应该做的,还是监视两个或多个线程之间共享的实际变量更典型?


是的,我通常会锁定专门为此目的创建的新对象。我还确保它是私有的和静态的not一个类型对象。同样重要的是要认识到,您并不是真正“锁定”变量或对象,而是将锁用作阻止在多个线程上执行代码块的令牌。

锁定this(如果使用 C#,则为当前实例)不太受欢迎,因为任何有权访问该实例的代码都可能对其加锁,从而增加了死锁的可能性。通过创建自己的锁对象,您可以完全控制自己。

这是一篇内容丰富的文章 http://bytes.com/topic/c-sharp/answers/249277-dont-lock-type-objects关于锁定解释了其中一些背后的原因。

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

监视器应该等待什么对象? 的相关文章

随机推荐

  • Intellij 无法理解 SQL 字符串

    大家 我正在制作一个玩具网络应用程序 它使用 Spring Boot 和 Mybatis Mybatis映射器配置Java接口 我希望 Intellij 能够理解 SQL 字符串 但事实并非如此 我期待像下面这样的 如果它理解 Intell
  • curl_getinfo($ch, CURLINFO_CERTINFO) 为空

    我有 PHP 7 2IUS https ius io GettingStarted 存储库 但默认 PHP CentOS 7 x 上的行为相同 Code domain google com ch curl init curl setopt
  • 404 页面适用于本地主机,但不适用于生产(Azure Web App)

    我的本地主机上有一个 404 页面 运行得很好 但是 当它被推送到 Azure Web App 时 却没有 我最初是通过发布工具推送它的 现在我使用从 Github 分支推送的内置功能 我有以下内容网络配置
  • “Line2D”对象没有属性“kind”

    我刚刚开始学习 pandas 当时我想制作 2013 年车站平均值的条形图 以创建一个fig ax plt subplots 对象并将绘图添加到创建的 ax 我在运行这部分代码时收到此错误 Line2D 对象没有属性 kind fig ax
  • 无法在 Tkinter 中禁用自动换行

    我正在尝试在禁用自动换行和水平滚动条的文本窗口中写入 如下所示 root Toplevel root geometry dx d 0 0 350 400 af Frame root chtext Text af width 45 wrap
  • 2.5升级后无法编辑Streamfield页面

    我在本地开发中有一个使用 Streamfield 和 2 个自定义 StructBlock 字段的站点 在 2 4 中工作正常 但升级到 2 5 后 我可以在管理中正常创建页面 但当我保存后在管理中编辑该页面时 会出现错误 我也尝试使用新的
  • 如何将div转换为图像?

    我有一个 div 我需要制作这个 div 的图像并发送给服务器 有什么方法可以使用 Angular 7 来做到这一点吗 我尝试搜索库但没有结果 所有解决方法都使用原生 JS 要将 HTML 内容保存到图像中 您需要使用HTML2CANVAS
  • 在 rabin-karp 滚动哈希中选择基数和模素数

    哈希函数的解释为维基百科 http en wikipedia org wiki Rolling hash 它说 a 和 n 的选择对于获得良好的散列至关重要 并引用了一篇感觉不相关的线性同余生成器文章 我无法弄清楚这些值是如何选择的 有什么
  • driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS) 不起作用

    driver manage timeouts implicitlyWait 10 TimeUnit SECONDS 上面的隐式等待代码在 Google Chrome 上对我不起作用 我尝试过使用 selenium 2 47 和 2 53 1
  • 如何在 conda 环境中启动 exe

    我在 Windows 10 中使用 vscode 作为代码编辑器 并希望找到一种简单的方法来使用正确的 conda env 启动它以进行调试 目前 我必须打开命令提示符 然后激活 conda env 然后将 vscode 的快捷方式粘贴到提
  • 直接渲染CGImage(而不是UIImage)?

    我正在做一个CGImage func otf gt CGImage 这是渐变上的贝塞尔蒙版 所以 the path let p UIBezierPath p moveTo etc the mask let m CAShapeLayer se
  • Crystal Reports 10 命令对象更改数据源位置

    我已经在 Crystal Report 中使用了命令对象 现在我需要更改数据源 我已按照知识库文章 c2016958 中的说明进行操作 下载 解压缩并应用了 cr10win en zip 和 dbex10win en zip 但我的连接仍然
  • 访问reactjs中的viewbag属性

    我正在开发一个Web应用程序 我使用reactjs和MVC c 我想知道 jsx 是否包含在 cshtml 中 是否可以访问 jsx 中的 viewbag 属性 我想要将一个对象或 id 传递给 jsx 并将其呈现在 UI 中 ViewBa
  • 如何制作单独的角材料步进器标题和内容?

    我正在用有角度的材料做一个垂直步进器 问题是这个步进器将每个步骤的内容放在步骤标题下方 因此如果有很多步骤 它看起来会很糟糕 因为你必须滚动 我的想法是将标题与内容分开 这样它看起来更像是侧导航 但具有角度材质功能 这是我现在所拥有的 内容
  • 从 Java Applet 调用 Javascript 函数

    我在 HTML 页面中有一个 Java Applet 我需要让小程序调用某个 Javascript 函数来通知 HTML 页面某些事件 我目前调用 JavaScript 函数的方式是 getAppletContext showDocumen
  • Clojure 哈希映射到 xml

    我正在尝试将以下映射转换为 xml 任何具有向量值的键都需要为向量中的每个元素重复 xml 中的键 use clojure xml defn map to xml2 k v cond nil k for e a v tag e conten
  • 使用 DatabaseMetaData 检索 mysql 表注释

    因此 我正在将 Vaadin Java Web 框架用于需要编辑表的功能的项目 Vaadin 提供了一种获取方法Connection对象来自SimpleJDBCConnectionPool 这是 API https vaadin com a
  • XSLT - 从模板中删除空格

    我正在使用 XML 存储一个小型联系人列表 并尝试编写一个 XSL 模板将其转换为 CSV 文件 我遇到的问题是输出中存在空格 输出 Friend John Smith Home 123 test Sebastopol California
  • 在 Matlab 中向量化数组索引/取子集

    假设我有一个长数据向量 y 加上一些索引 我想在每个索引周围提取一个简短的片段或窗口 例如 假设我想构建一个矩阵 其中每个小于 3 的值之前包含 64 个样本 之后包含 64 个样本 这在 for 循环中很简单 WIN SIZE 64 Sa
  • 监视器应该等待什么对象?

    使用 Monitor Wait object obj 时 应该对 obj 使用什么 在这个article http www yoda arachsys com csharp threads 我正在阅读 NET 中的多线程 作者实例化了一个新