锁内锁

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

锁内锁 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 按成员序列化

    我已经实现了template
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 理解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是一个包装器