除了 new object() 之外,还有什么理由要锁定其他东西吗?

2023-11-24

object theLock = new object();

...


lock (theLock)
{
    ...
}

我总是用一个new object()为此,但我想知道:是否有任何情况下您会锁定更具体的类型?


在我看来,任何引用类型都可以被锁定,使用虚拟对象的原因是为了避免常见的锁定陷阱:

常见的构造锁(this), 锁(typeof(MyType)),和锁 (“myLock”)违反了此准则:

  lock (this) is a problem if the instance can be accessed publicly.


  lock (typeof (MyType)) is a problem if MyType is publicly

无障碍。

  lock("myLock") is a problem because any other code in the process

使用相同的字符串,将共享 相同的锁。

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

除了 new object() 之外,还有什么理由要锁定其他东西吗? 的相关文章

  • 无需登录即可在 Intranet 上获取 Web 应用程序的域\用户名

    我的 Intranet 上有一个 Web 应用程序 VS 2005 有几个页面不需要用户登录应用程序 反馈和默认页面 我正在尝试获取要显示和 或发送反馈的域名和用户名 有没有一种方法可以在不需要用户登录的情况下执行此操作 我试过了this
  • JetBrains Rider 针对 4.5 框架,无法切换到 4.7

    基本上 当尝试添加不支持旧框架的 NuGet 包时 会出现错误 但是在项目配置中只有 4 5 可用 在项目创建过程中 不存在选择目标的选项 有什么方法可以正确配置它吗 I haven t found out how to set up NE
  • 当 foreach 块的内容具有 Conditional 属性时,C# 编译器是否会对其进行优化?

    我正在工作中编写一些调试代码 我想知道我所做的是否会损害性能 让我们看一下代码 foreach var item in aCollection Debug WriteLine item Name 我知道 Debug 类使用 Conditio
  • std::bind2nd 和 std::bind 与二维数组和结构数组

    我知道 C 有 lambda 并且 std bind1st std bind2nd 和 std bind 已弃用 然而 从C 的基础开始 我们可以更好地理解新特性 所以 我从这个非常简单的代码开始 使用int 数组s 第一个例子 与std
  • 静态 OpenCV 库中未定义的引用

    我有一个使用 OpenCV 3 1 的 C 项目 并且使用共享库可以正常工作 但现在我想使用静态库 位于项目目录中的文件夹中 来编译它 因为我希望能够在未安装 OpenCV 的情况下导出它 如果需要还可以编辑和重新编译 这次我重新编译了 O
  • 如何部署包含第三方 DLL 文件的 C# 应用程序?

    首先 我对部署了解不多 我希望我的问题有意义 我需要将 C 应用程序安装 部署到多个桌面 它需要一个第三方 DLL 文件 一个 C 库 lpsolve55 dll 对于那些感兴趣的人 它是一个免费的 MIP LP 求解器 请参阅 lpsol
  • 如何将 Visual-Studio 2010 切换到 c++11

    我是 c 编程新手 我想尝试 c 11 新功能 那么我要问的是如何切换 Visual studio 2010 才能编译 c 11 源代码 你可以参考这个表 VC10 中的 C 0x 核心语言功能 表格 http blogs msdn com
  • 使用默认行为将模型绑定到接口

    我正在尝试将控制器操作绑定到接口 但仍保持默认的绑定行为 public class CoolClass ISomeInterface public DoSomething get set ISomeInterface public clas
  • PartialView Action 正在调用自身

    我有 MVC 应用程序 它用于从主视图 ProductMaster 将 ProductAreaGrid 列表显示为 PartialView 并且它将在局部视图内将 CreateProductArea 作为 PartialView 我的 Gr
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • 原子的 C++ 内存屏障

    在这方面我是个新手 谁能提供以下内存屏障之间差异的简化解释 窗户MemoryBarrier 围栏 mm mfence 内联汇编asm volatile memory 内在的 ReadWriteBarrier 如果没有简单的解释 一些好文章或
  • 何时分离或加入 boost 线程?

    我有一个方法 大约每 30 秒触发一次 我需要在一个线程中包含它 我有一个可以从类外调用的方法 像 call Threaded Method 这样的东西会创建一个线程 该线程本身会调用最终的线程方法 这些是 MyClass 的方法 void
  • 文件加密与解密问题

    我一直在尝试在 VC Express 2010 中加密和解密文件 我见过的所有教程和文档都需要两个FileStreams 来加密文件 一个用于读取未加密的版本 另一个用于加密 当我实际编写代码时 它不断抛出错误 告诉我它无法打开该文件 因为
  • 这些工作队列标志意味着什么?

    在研究工作队列时 我遇到了内核中定义的工作队列标志和常量 我有以下我无法理解的疑问 这里的排水和救援到底是什么意思 WQ DRAINING 1 lt lt 6 internal workqueue is draining WQ RESCUE
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • 在 C# 窗口应用程序中运行 C/C++ 控制台应用程序?

    现在 我想开发一个简单的应用程序 因此我决定最快的编码方式是 C NET 但现在 我很难实现我需要的功能之一 我想做的是在 C 应用程序的窗口内运行 C C 控制台应用程序 就像在虚幻前端中一样 添加一点通信方式 以便我可以为控制台应用程序
  • 检查另一种形式的线程是否仍在运行

    我有一个涉及两个窗体的 Windows 窗体应用程序 子表单用于将数据导出到 CSV 文件 并使用后台工作者写入文件 当这种情况发生时 我隐藏了表格 当后台工作程序运行时 父窗体仍然处于活动状态 因此即使后台工作程序正在写入文件 用户也可以
  • 在两个点之间创建一条曲线,每个点都具有标准化向量

    因此 我需要一种写入方法来在两点之间创建一条曲线 每个点都有一个指向任意方向的归一化向量 我一直在尝试设计这样一种方法 但一直无法理解数学 在这里 由于一张图片胜过一千个文字 这就是我所需要的 在图中 矢量垂直于红线 我相信向量需要进行相同
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收
  • 线程安全的有限大小队列,不使用锁

    我正在尝试编写一个主题队列 但遇到死锁和其他多线程问题 我想用Interlocked CompareExchange避免lock用法 但这段代码并没有按预期工作 它只是擦除整个队列 我在这里做错了什么 public class FixedS

随机推荐

  • .gitattributes 中的 `* text=auto` 和 `* text eol=lf` 有什么区别?

    我一遍又一遍地查看文档 gitattributes但我无法找到关于这两者之间有什么区别的明确答案 text auto text eol lf Also is text auto仅适用于 或者它也可以与特定的扩展一起使用 在这种情况下有什么区
  • 绝对定位及其父元素

    我总是听说 当您使用绝对定位时 您想要充当其父级的元素需要有一个position of relative 我试图构建一个 CSS 下拉菜单 当我将其父元素设置为时 我正在努力让下拉菜单项拉伸超出主菜单项的宽度relative 下拉菜单项中的
  • 用户不活动时屏幕变暗

    我有一个应用程序 可以使用 4 个小时 但用户只需每 5 分钟需要进行一次输入或阅读屏幕 让手机进入睡眠状态并锁定屏幕有点烦人 所以我有两个选择 getWindow addFlags WindowManager LayoutParams F
  • svg 到 png 不起作用,怀疑 svg 元素差异

    我无法弄清楚为什么两个不同的 svg 会导致我的 javascript 在一个实例中工作 但在另一个实例中不起作用 我只交换了两个示例中的 svg 元素 一个有效 一个无效 这是两个 jsFiddles 中的代码 我从中得到的工作示例her
  • 在 Groovy/Java 中比较两个 XML 字符串/文件

    我正在编写单元测试来检查一些 XML 构建器 现在我遇到了预期结果和实际结果之间的语法差异问题 尽管它们的语义相同 Example 预期结果 您可以使用 GroovyXMLUnit像这样的实用程序 XMLUnit setIgnoreWhit
  • 如何根据选定的注释移动 MKMapView

    我有一个 MKMapView 它填充了我的整个视图 但是当选择一个图钉时 我会在地图顶部向上滑动另一个视图 我想移动地图 以便图钉出现在地图可见区域的中心 很难解释 但希望它是有道理的 提前致谢 您可以尝试从visibleMapRect对于
  • 将 jquery 函数包装在闭包中有什么好处?

    嗨 我一直忙于将我的 JQuery 知识提升到一个新的水平 到目前为止 我认为我已经理解了所有内容 但是当我冒险学习更高级的教程时 我注意到有几个实例 其中 JQuery 例程被包装在一个闭包 见下文 然而 让我困惑的是它传递一个 并返回
  • SQL 将结果连接到 codeigniter 中的对象中

    好的 一些背景知识 刚刚进入 codeigniter 不喜欢 sql 和服务器端脚本 我知道什么是连接 我第一次拥有多对多数据库 这是因为连接通常会产生以下示例 但我想解析它 而不必构建代码来忽略重复 这是一个 3 表连接示例 当我加入更多
  • 合并同一项目的两个git存储库

    我目前是唯一一位从事我从前任接手的项目的开发人员 当我接手这个项目时 它还没有受到源代码控制 因此 我创建了一个新的 git 存储库 对状态进行了初始提交 并从此开始对其进行处理 但最近我在备份中发现了同一个项目的一个古老版本 它实际上是一
  • 通过Windows C++让鼠标通过

    我正在开发一个 Win32 C 应用程序 我想忽略鼠标事件并让其传递到我的窗口下方的窗口 基本上我下面的窗口将处理鼠标事件 我不想使用 SendMessage 将鼠标消息发送到我下面的窗口或使用 SetCapture 有没有一种方法可以基本
  • 在 Dask 中排序

    我想找到替代方案pandas dataframe sort value在 dask 中运行 我走过来了设置索引 但它会按单个列排序 如何对 Dask 数据框的多列进行排序 目前为止Dask似乎还不支持多列排序 但是 创建一个新列来连接已排序
  • 找不到文件:mainwindow.obj

    我创建了一个 GUI 应用程序 gt QMainWindow 我在菜单 插槽中添加了 1 项 我创建了一个新项目 gt QDialog 我使用插槽方法尝试显示创建的对话框 但出现以下错误 mainwindow obj 1 错误 LNK201
  • 有没有办法了解“平台”访问网页的硬件资源?

    我希望能够从网页中了解浏览器的硬件资源 或者至少是一个粗略的估计 即使您检测到现代技术的存在 例如csstransforms3d csstransitions requestAnimationFrame 在浏览器中通过类似的工具Modern
  • Python,多线程太慢,多进程

    我是多处理新手 我了解一些有关线程的知识 但我需要提高计算速度 希望通过多重处理 示例说明 将字符串发送到线程 更改字符串 基准测试 将结果发回打印 from threading import Thread class Alter Thre
  • 将多维Json数组解析为Python

    我第一次尝试解析 JSON 并处理多维数组 这让我不知所措 secret Hidden minutes 20 link http www 1 com bookmark collection free link name free link
  • 在 Guice 中绑定,无需

    我有个问题 通常在Guice中我使用bind class to 另一个类实现 但是我在代码源中发现他们仅使用了bind class 没有 to another class Implementation 部分 这是什么意思 bind clas
  • 如何用关系代数求 MAX?

    使用数据库时 如何使用关系代数求 MAX 假设您有一个关系 A 具有单个属性 a 减少一个更复杂的关系是关系代数中的一个简单任务 我确信您已经做到了这一点 所以现在您想要找到最大值A 中的值 一种方法是找到 A 与其自身的叉积 请务必重命名
  • 从定期异步请求创建 observable

    我想要一种将异步方法转换为可观察方法的通用方法 就我而言 我正在处理使用的方法HttpClient从 API 获取数据 假设我们有方法Task
  • 为什么在 Ruby 中应该避免使用 then 关键字?

    一些 Ruby 风格指南中提到 您应该 永远不要使用 就我个人而言 我认为 then 关键字可以使代码更密集 这往往更难阅读 这个建议还有其他理由吗 我几乎从不使用then关键词 然而 有一种情况我认为它极大地提高了可读性 考虑以下多条件
  • 除了 new object() 之外,还有什么理由要锁定其他东西吗?

    object theLock new object lock theLock 我总是用一个new object 为此 但我想知道 是否有任何情况下您会锁定更具体的类型 在我看来 任何引用类型都可以被锁定 使用虚拟对象的原因是为了避免常见的锁