锁内锁

2024-03-23

我想知道这种构造是否会导致错误:

lock(sync)
{
  // something
  lock(sync)
  {
    //something
    lock(sync)
    {
      //something
    }
  }
}

我已经运行了这段代码,看起来不错,但也许在某些情况下可能会引发错误?


lock是一个包装器Monitor.Enter and Monitor.Exit http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx:

The lock关键字调用Enter在块的开头和Exit在块的末尾。来自前者的文档:

从文档中Monitor.Enter http://msdn.microsoft.com/en-us/library/de0542zz.aspx:

同一个线程调用是合法的Enter不止一次而不会阻塞;然而,同等数量的Exit必须在等待该对象的其他线程解除阻塞之前调用调用。

因为调用Enter and Exit配对后,您的代码模式具有明确定义的行为。

但请注意,lock不保证是无异常的构造:

A ThreadInterruptedException被抛出如果Interrupt中断正在等待进入的线程lock陈述。

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

锁内锁 的相关文章

  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • 如何使用recv()检测客户端是否仍然连接(并且没有挂起)?

    我写了一个多客户端服务器程序C on SuSE Linux 企业服务器 12 3 x86 64 我为每个客户端使用一个线程来接收数据 我的问题是 我使用一个终端来运行服务器 并使用其他几个终端来运行服务器telnet到我的服务器 作为客户端
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • 理解Python集合的行为

    内置类型的文档set says class set iterable 返回一个新的 set 或 freezeset 对象 其元素取自 可迭代的 集合的元素必须 可散列 没关系 但是为什么会这样 gt gt gt l range 10 gt
  • C++ 中的临界区和返回值

    在尝试从头开始创建线程安全容器类时 我遇到了从访问方法返回值的问题 例如在 Windows 中 myNode getSomeData EnterCriticalSection myCritSec myNode retobj fill ret
  • 打印具有特定数量的零的浮点数

    我知道如何控制小数位数 但是具体如何控制零的数量呢 例如 104 06250000 gt 104 0625 119 00000 gt 119 0 72 000000 gt 72 0 使用十进制模块怎么样 来自文档 http docs pyt
  • 如何将文本环绕在图像或可组合项周围?

    如何将文本环绕在图像或可组合项周围 类似的东西流文本视图 https github com deano2390 FlowTextView在 Jetpack Compose 中 我想知道是否有可能留下一定的空闲空间 这样如果文本太长 它就会断
  • 如何将卡片放入条子应用栏中

    我做了一个 sliverappbar 我想在这个 sliverappbar 上放一张卡片 如何将卡片放在 sliverappbar 上 并且该卡片会随 sliverappbar 一起折叠 该卡应一半在应用栏中 一半在 正文 中 Custom
  • 通过示例查询 Spring Data - In Clause?

    根据 Spring 文档 我只能为 QBE 编写精确匹配 我只需要精确匹配 但在一组值之间 查询的 IN 子句 e g Person p new Person p setId need to match among set of ids E
  • 访问 iframe 中的表单

    我正在尝试访问表单及其元素 该表单位于 iframe 内 访问该表单的 javascript 代码位于主文档内 我不确定我还应该在这个问题中添加什么内容 所以如果我需要添加其他内容 请告诉我 表单和主页在同一域中 Thanks var if
  • 查询失败,错误代码为 13 并显示错误消息“未授权在 [db] 上执行命令 { find:

    我正在使用以下 蒙戈3 2 7 春季 4 3 1 发布 我创建了以下具有以下权限的用户 gt use admin switched to db admin gt db getUser UserAdminNew id admin UserAd
  • 角度跟踪依据和排序依据

    开始使用 Angular 并进行演示 在模型中 事件项包括名为starts at 的开始时间和标题 我有一个使用 ng repeat event in events track by index 的标签 并尝试添加 orderBy even
  • 如何在 VB.Net 中声明 lambda 事件处理程序?

    我相信以下 VB Net 代码与前面的 C 代码等效 然而 VB Net 测试失败 事件处理 Lambda 从未被调用 到底是怎么回事 VB Net 版本 失败
  • 在后台运行 Chrome 扩展程序

    我目前正在创建我的第一个 Chrome 扩展程序 到目前为止一切顺利 这只是我运行多个计时器的一个小测试 但显然 当我打开和关闭扩展程序时 我的所有计时器都会重置 因此 为了保持所有计时器运行 当我关闭扩展程序并使它们在后台页面中运行时 我
  • MapView 自定义 Pin 图问题

    我已经更改了 MapView 引脚图像 但遇到了这个问题 其中一些点不会更改引脚图像 而其中一些会发生变化 问题会出在哪里呢 我添加了一个例子 My Code MKAnnotationView mapView MKMapView mV vi
  • 如何在 ES6 中获取 Set 的第一个元素(EcmaScript 2015)

    在ES6中 我们如何快速获取元素呢 in Set 的 MDN 语法 https developer mozilla org en docs Web JavaScript Reference Global Objects Set 我没有找到答
  • CSS中这个符号是什么意思?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 这是什么 这是关于 CSS 语法时不时出现的问题的集合 这也是一个社区 Wiki 所以邀
  • Django 表单向导和 recaptcha

    我使用以下命令进行了验证码集成Django 片段 http www djangosnippets org snippets 1653 settings py RECAPTCHA PUBLIC KEY
  • 创建物化视图时如何指示某列不可为空?

    我正在使用以下查询创建物化视图 CREATE MATERIALIZED VIEW article view AS SELECT id alternative headline article author id created at des
  • 有没有更好的方法在字符串列表上使用 strip() ? - 蟒蛇[重复]

    这个问题在这里已经有答案了 现在我一直在尝试对字符串列表执行 strip 我这样做了 i 0 for j in alist alist i j strip i 1 有更好的方法吗 你可能不应该使用list作为变量名 因为它是一种类型 不管
  • 内连接与 IN

    SELECT C FROM StockToCategory STC INNER JOIN Category C ON STC CategoryID C CategoryID WHERE STC StockID StockID VS SELE
  • Rx 中的历史调度程序

    我有以下代码 我尝试重播序列 但 PostWorkItem 总是为 null 我不明白为什么 下面的代码给出了堆栈溢出错误 Task
  • 锁内锁

    我想知道这种构造是否会导致错误 lock sync something lock sync something lock sync something 我已经运行了这段代码 看起来不错 但也许在某些情况下可能会引发错误 lock是一个包装器