等待句柄会释放线程获取的锁吗?

2024-02-22

当我有如下所示的代码时,我的问题是调用 signal.WaitOne 的线程是否释放已获取的锁以供另一个线程获取锁?我认为这是一个微不足道的问题,但我尝试寻找类似的东西,却一无所获。如果有人可以阐明这一点并修改我的帖子/标题,使其更容易被将来寻找此内容的人搜索到,我将不胜感激。

AutoResetEvent signal = new AutoResetEvent(false);

foo() {
  Monitor.Enter(locker);
  try {
       // code

       if(condition)
          signal.WaitOne();

       // code         
  } finally {
      Monitor.Exit(locker);
  }
}

编辑:我正在进行此编辑以供将来参考:

对于我想做的事情来说,这似乎是一个更好的范例:

foo() {
  Monitor.Enter(locker);
  try {
       // code

       while(condition)
          Monitor.Wait(locker);

       // code         
  } finally {
      Monitor.Exit(locker);
  }
}

bar {
  lock(locker) {
      Monitor.Pulse(locker);
  }
}

不会。锁会一直保持到Exit叫做。一般来说,持有锁时应该尽量不要阻塞。它增加了陷入僵局的机会。

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

等待句柄会释放线程获取的锁吗? 的相关文章

随机推荐

  • 计算数组中具有特定属性值的项目数

    我有一个 Person 类 class Person NSObject var firstName String var lastName String var imageFor UIImage var isManager Bool ini
  • 如何将客户端 ID 添加到 Google Drive Client API for Java

    我刚刚开始在 Android 应用程序中使用 Google Drive REST API 我无法使用适用于 Android 的 Google 云端硬盘 API https developers google com drive androi
  • 为什么Hashtable的initialCapacity是11,而HashMap的DEFAULT_INITIAL_CAPACITY是16并且需要2的幂?

    比较HashMap and Hashtable在JDK 1 6的源代码中 我在HashMap中看到了以下代码 The default initial capacity MUST be a power of two static final
  • cudamemcpy函数使用

    在这种情况下 cudaMemcpy 函数将如何工作 我已经声明了一个这样的矩阵 float imagen par gt N par gt M 我想将其复制到 cuda 设备 所以我这样做了 float imagen cuda int tam
  • 球拍累加器列表功能

    我正在研究创建您可能玩过的 2048 游戏的具体步骤 它位于许多在线网站上 基本上这个函数所做的就是 1 所有空格移到后面 2 如果前两个数字相等 则加倍并检查每两个数字 这些是我所坚持的步骤的说明 设计一个向左滑动的函数 使其运行sing
  • Vagrant 错误 - 具有该名称的 VirtualBox 计算机已存在

    我想用ubuntu xenial64框为两个单独的项目创建两个单独的虚拟机 我在两个单独的项目目录中定义了 Vagrantfile 并添加了行config vm box ubuntu xenial64 每一个 第一个盒子启动成功 但当我这样
  • 强名称密钥密码存储在哪里?

    我通常不会费心签署我的 NET 程序集 所以除了它的基本机制之外我不知道太多 对于我正在开发的一个小项目 有必要进行签名 我创建了一个新密钥 并用密码进行保护 我预计在重新编译程序集时会在某个时间点提示输入此密码 但在创建密钥文件后我从来不
  • pyenv 在 Linux Mint 上构建 python 并带有警告:重命名“_ctypes”

    因为某些原因 pyenv由于以下问题 无法安装任何版本的 pythonlibffi 我已经安装了所有库 但我得到 WARNING renaming ctypes since importing it failed libffi so 8 c
  • App Engine 和 Commons FileUpload

    我正在使用以下代码从 Android 设备发送一条使用 google 协议缓冲区构建的消息 Set up the HttpClient HttpClient client new DefaultHttpClient String url h
  • 超时错误:400 StatusCode 错误:“要求失败:会话不活动。”

    我在用着Zeppelin v0 7 3笔记本运行Pyspark脚本 在一段中 我正在运行脚本来写入数据dataframe to a parquetBlob 文件夹中的文件 文件按国家 地区进行分区 数据帧的行数是99 452 829 当脚本
  • 词典顺序的定义? [复制]

    这个问题在这里已经有答案了 我目前正在阅读有关std next permutation http en cppreference com w cpp algorithm next permutation函数并遇到了术语 字典顺序 在特定的时
  • android 模拟器无法启动

    我正在尝试从 Android 虚拟设备管理器启动 Android 虚拟设备 Android 模拟器窗口打开 但屏幕仍显示在 Android 徽标上 并且没有进一步进展 在开始第二个 avd 之前它工作得很好 现在第一个 avd 和第二个 a
  • Spirit-Qi:如何编写非终结符解析器?

    我想写一个可以使用的解析器 作为 qi 扩展 通过my parser p1 p2 where p1 p2 是 qi 解析器表达式 其实我想实现一个best match解析器的工作方式类似于 qi 替代方案 但不选择第一个匹配规则 而是选择
  • 学习 jQuery 的 CSS 选择器

    我想学习 jQuery 在我看来 jQuery 只需选择你想要的元素 然后对其执行一些操作 但选择方式与CSS选择器很接近 而且我不熟悉CSS css选择器 因为我一直认为它相当不系统 我找不到任何规则 我对 CSS 选择器的了解如下 id
  • 在 Chrome 中,触发 $(document).ready() 时不会加载 资源。为什么?

    在 Firefox 和 IE 中 SVG SVG 文档在以下情况下检索 document ready 叫做 在 Chrome 中 getSVGDocument当以下情况时返回 null document ready 叫做 虽然似乎在大约 7
  • Htaccess 重写删除尾部斜杠

    Htaccess 以某种方式自动删除 url 末尾的所有尾部斜杠并只保留一个 例如http localhost api param1 http localhost api param1 变成http localhost api param1
  • 要安装多少个 wiki 实例?

    我被要求安装 Mediawiki 来保存公司内部网的文档 此外 我被要求安装several实例 每个贡献组一个 非技术用户获得一个 开发人员获得一个 管理人员获得一个 等等 我们的想法是为每个组提供单独的网络空间 有没有一种方法可以在一个实
  • 如何缓存从 Ajax 调用接收到的数据?

    我想缓存从服务器接收的数据 以便执行最少数量的 PHP MySQL 指令 我知道缓存选项是自动为 ajax 设置的 但是 每次调用 ajax 时我都会看到 MySQL 指令 即使 postdata 与之前的调用中的相同 我错过了什么吗 缓存
  • Code::Blocks 出现无效工具链错误

    Hello Debug uses an invalid compiler Probably the toolchain path within the compiler options is not setup correctly Skip
  • 等待句柄会释放线程获取的锁吗?

    当我有如下所示的代码时 我的问题是调用 signal WaitOne 的线程是否释放已获取的锁以供另一个线程获取锁 我认为这是一个微不足道的问题 但我尝试寻找类似的东西 却一无所获 如果有人可以阐明这一点并修改我的帖子 标题 使其更容易被将