如何在 C# 中使用多个变量来锁定作用域

2024-01-02

我遇到的情况是,只有两个储物柜对象空闲时才应执行代码块。

我希望会有类似的东西:

lock(a,b)
{
    // this scope is in critical region
} 

然而,似乎并没有这样的事情。那么这是否意味着做到这一点的唯一方法是:

lock(a)
{
    lock(b)
    {
        // this scope is in critical region
    }
}

这会按预期工作吗?虽然代码可以编译,但我不确定它是否能达到我的预期。


lock(a) lock(b) { // this scope is in critical region }

这可能会阻塞,直到线程可以获得锁a。然后,获取该锁后,它将阻塞,直到线程可以获取锁b。所以这按预期工作。

但是,您必须小心不要在其他地方这样做:

lock(b) lock(a) { // this scope is in critical region }

这可能会导致死锁情况,其中线程 1 已获取锁a并正在等待获取锁b,并且线程 2 已获取锁b并正在等待获取锁a.

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

如何在 C# 中使用多个变量来锁定作用域 的相关文章

  • 为什么这个 Web api 控制器不并发?

    我有一个 Web API 控制器 里面有以下方法 public string Tester Thread Sleep 2000 return OK 当我调用它 10 次 使用 Fiddler 时 我预计所有 10 次调用都会在大约 2 秒后
  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • 现代 C++ 编译器是否能够在某些情况下避免调用 const 函数两次?

    例如 如果我有以下代码 class SomeDataProcessor public bool calc const SomeData d1 const SomeData d2 const private Some non mutable
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 获取Windows下新线程/删除线程的通知

    创建 DLL 时 您可以在 DllMain 函数 DLL THREAD ATTACH DLL THREAD DETACH 中获取有关新线程 退出线程的通知 有没有办法在 非托管 可执行文件中从 Windows 获取这些或等效通知 是的 在您
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • 如何在 bash 中使用 grep 测试进程是否正在运行?

    我有命令 ps ax grep my application 它输出一个大字符串 包括我的应用程序中涉及的进程的端口 如果 my application 未运行 则输出 3873 pts 0 S 0 00 grep my applicati
  • Laravel/blade 缓存 css 文件

    我正在 Nginx 服务器上工作 使用 PHP FPM 我安装了Laravel 4 1 and bootstrap v3 1 1 这就是问题所在 在过去的 30 分钟里 我一直在尝试更改我首先声明的检查 boostrap 的 CSS 规则
  • PageKeyedDataSource loadAfter 没有起火

    在我的片段中 我集成了 android jetpack 分页库和我使用的数据源页面键控数据源带有改造 API 回调 代码以异常方式运行并将数据加载到回收者视图但当我滚动到底部后 它应该通过触发加载更多数据加载后数据源类中的函数 但没有 我也
  • 如何在swift 3中绘制圆弧

    我有一些来自网络服务的百分比值 根据百分比值我想在a中画一些圆弧UIView通过以下方式 白色圆圈是一个UIView我尝试通过这种方式来实现这一目标 func colorProgress let circleColorPath UIBezi
  • byte[] 到无符号 BigInteger?

    动机 我想将哈希值 MD5 SHA1 等 转换为十进制整数 以便在 Code128C 中制作条形码 为简单起见 我希望所有结果 大 数字都是正数 我能够在 C 中将 byte 转换为 BigInteger 到目前为止我所拥有的样本 byte
  • 如何在 Visual Studio 2013 中启用 C# 6.0 功能?

    我正在了解 C 6 0 中引入的最新功能 并且只是遵循自动属性初始值设定项的示例 class NewSample public Guid Id get Guid NewGuid 但我的 IDE 无法识别该语法 我想知道如何在 Visual
  • Docker 容器构建失败:“exec:\”flask\”:在 $PATH 中找不到可执行文件”:未知

    我正在学习码头工人 我尝试在 docker com 上运行示例 dockerfile 但我有一个问题是 守护进程的错误响应 OCI 运行时创建失败 container linux go 345 启动容器进程导致 exec flask 在 P
  • 如果文件已重命名,如何查找文件扩展名?

    如果文件已重命名 如何查找文件扩展名 有没有可用的工具 示例 我有一个文件 1 doc 我希望大家知道这是一个我刚刚重命名为 1 txt 的Word文档 但该文件原本是Word文档 如何获得原始文件扩展名 您无法恢复以前的文件扩展名 您所能
  • 通过流下载 azure blob - 出口 137

    我正在尝试通过 Azure python sdk get blob to stream 下载大文件 但是 我的程序不断退出 返回代码为 137 这似乎与内存不足有关 我可以在顶部看到 python 正在消耗越来越多的内存 直到它被杀死 Co
  • 为 AWS APIGateway 创建 VPC 链接时出现“NLB ARN 格式错误”

    我按照教程创建了一个指向我的私有 elb 平衡器的 VPC 链接 https docs aws amazon com apigateway latest developerguide set up api with vpclink cli
  • 验证是否所有复选框均未选中的快速方法?

    如果取消选择所有复选框 是否有一种快速方法或功能可以告诉我真 假 不通过数组 使用 JS 和 HTML 我所有的复选框都有相同的名称
  • “respond_to do |格式|”抛出 UnknownFormat 错误

    我正在尝试使用 ajax 从控制器渲染 js 文件 这个确切的代码以前总是有效的 甚至在其他方法中也有效 但我突然开始收到此错误 ActionController UnknownFormat in MoviesController vote
  • jQuery 选择框 .val('') 行为从 1.9 到 1.10+ 不同,最短的方法是什么[重复]

    这个问题在这里已经有答案了 jQuery 1 9 和 1 10 之间的以下行为有所不同
  • 局部变量的 MAXRECURSION 值

    我正在 SQL Server 2005 中编写一个存储过程 它声明一个名为 CTE 公用表表达式 foo foo递归地调用自身 但当 SP 的参数之一 bar 一片空白 为了停止这个无限循环 我一直在尝试使用该选项MAXRECURSION
  • 使用 JavaScript 从 Dropbox 下载文件

    I have 我有一个网站正在尝试向客户提供一项服务 以便能够从 Dropbox 下载文件 为了简化开发 我使用Dropbox 选择器 https www dropbox com developers chooser 为此 我启用了我希望从
  • 如何添加元组

    我有这样的伪代码 if b lt a return 1 0 foo a b b 我想用Python写它 但是Python可以添加元组吗 编写类似代码的最佳方法是什么 我会去 gt gt gt map sum zip 1 2 3 4 4 6
  • Clojure / Incanter 中的快速矢量数学

    我目前正在研究 Clojure 和 Incanter 作为 R 的替代品 并不是说我不喜欢 R 而是尝试新语言很有趣 我喜欢 Incanter 并且发现语法很有吸引力 但相比之下 矢量化操作相当慢例如到 R 或 Python 作为一个例子
  • 适合7岁孩子的环境[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • OpenCV 尝试使用 RELEASE 构建读取视频时崩溃

    Using VideoCapture vcc someDir someFile avi 作为我的代码 OpenCV 2 x Win7 VS2010 中的第一行 RELEASE 的执行崩溃了 但 DEBUG 工作正常 尽管慢如预期 仅当尝试读
  • 如何在 C# 中使用多个变量来锁定作用域

    我遇到的情况是 只有两个储物柜对象空闲时才应执行代码块 我希望会有类似的东西 lock a b this scope is in critical region 然而 似乎并没有这样的事情 那么这是否意味着做到这一点的唯一方法是 lock