C# 中的队列和等待句柄

2024-01-23

我的应用程序中使用以下代码已有多年,但从未发现其中出现问题。

while ((PendingOrders.Count > 0) || (WaitHandle.WaitAny(CommandEventArr) != 1))
{
    lock (PendingOrders)
    {
       if (PendingOrders.Count > 0)
       {
           fbo = PendingOrders.Dequeue();
       }
       else
       {
           fbo = null;
       }
    }

    // Do Some Work if fbo is != null
}

其中 CommandEventArr 由 NewOrderEvent(自动重置事件)和 ExitEvent(手动重置事件)组成。

但我不确定这是否是线程安全的(假设 N 个生产者线程在排队之前全部锁定队列,并且一个消费者线程运行上面的代码)。另外,我们可以假设 Queue.Count 属性仅从 Queue 类返回一个实例 Int32 值(没有 volatile 或互锁或锁等)。

与队列和 AutoResetEvent 一起使用的常用模式是什么来解决此问题并执行我尝试使用上面的代码执行的操作?

(在正确指出 Queue.Count 可以做任何事情及其特定于其实现之后,进行编辑以稍微更改问题)。


对我来说看起来相当线程安全,WaitAny() 将立即完成,因为事件已经设置。那是not一个问题。

不要破坏有效的线程同步。但如果你想要一个更好的捕鼠器,那么你可以考虑 Joe Duffy 的 BlockingQueue杂志文章 http://msdn.microsoft.com/en-us/magazine/cc163427.aspx#S4。 .NET 4.0 中有一个更通用的版本,System.Collections.Concurrent.BlockingCollection http://msdn.microsoft.com/en-us/library/dd267312.aspxConcurrentQueue 作为它的实际实现。

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

C# 中的队列和等待句柄 的相关文章

  • .NET 中是否有内置函数可以对密码进行哈希处理?

    我看到这个问题加密 散列数据库中的纯文本密码 https stackoverflow com questions 287517 encrypting hashing plain text passwords in database 我知道我
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 无锁算法真的比全锁算法性能更好吗?

    陈雷蒙德 http blogs msdn com b oldnewthing 一直在做一个huge http blogs msdn com b oldnewthing archive 2011 04 15 10154245 aspx ser
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 基于视图和单元格的 NSTableView

    Cocoa 中基于单元格的表格视图和基于视图的表格视图之间的主要区别是什么 我的理解是基于单元格的表格视图基本上用于显示字符串 基于视图用于自定义单元格 诸如拖动行 选择等用户事件可以在基于视图中处理 基于单元格的表格视图使用 object
  • 如何完全禁用LogCat暂停?

    我对新的 LogCat 及其暂停功能有一个大问题 当我想从中读取一些较旧的条目时 我喜欢暂停输出的想法 但有时我希望输出不间断 这样我就可以触摸手机 并通过读取输出来查看它的反应 所以令我非常沮丧的是 LogCat 经常完全暂停 暂停按钮被
  • 在 div 上使用“display:table-cell”有缺点吗?

    我想要实现的是拥有一个固定宽度的第一个 div 和一个流动的第二个 div 它将填充父 div 宽度的其余宽度 div class clearfix div style width 100px some content div div so
  • hsc2hs:使用 Haskell 改变 C 结构

    我正在尝试编写一个与 C 通信的 Haskell 程序 最终通过 GHC iOS 用于 iOS 我希望它将一个字符串从 C 传递到 Haskell 让 Haskell 处理它 然后通过 hsc2s 将一些数据类型从 Haskell 返回到
  • 如何在 Mahout 0.9 中实现 SlopeOne 推荐器?

    我是 Mahout 新手 正在尝试使用 0 5 版本的 Mahout in Action 早期的例子之一要求使用斜率一推荐器 Mahout 0 9 中还包含此推荐器吗 我查看了文档 但找不到它 也许它已经改名了 感谢您的帮助 Mahout
  • 当表没有行时,将表的可见性设置为 false(在报告服务中)

    如果表没有行 有没有办法将表的可见性设置为 false 我想在 Reporting Services 中隐藏没有行的表 将 NoRows 设置为 在这种情况下是不够的 因为仍然为表格留有空间 并且表格的某些格式仍然可见 我正在使用 Micr
  • 在 Python 中 - 解析响应 xml 并查找特定文本值

    我是 python 新手 在使用 xml 和 python 时遇到特别困难 我遇到的情况是这样的 我正在尝试计算一个单词在 xml 文档中出现的次数 很简单 但是 xml 文档是来自服务器的响应 是否可以在不写入文件的情况下执行此操作 尝试
  • Ansible,将字典合并为一次

    我有这个示例 yaml 文件 haproxy yml rules aa PHP53 url php53 1 aa my example com PHP55 url php55 1 aa my example com PHP56 url ph
  • 根据请求参数有条件地使用中间件express

    我正在尝试根据请求查询参数决定要使用的中间件 在主模块中我有这样的东西 app use function req res if req query something pass req res to middleware a else pa
  • 使用 __getattr__ 和 __setattr__ 功能实现类似字典的对象

    我正在尝试实施一个dict类似对象 可以访问 修改 getattr and setattr 为了方便我的用户使用 该类还实现了一些其他简单的功能 Using 这个答案 https stackoverflow com questions 33
  • 非灵活环境应用程序的自定义运行时?

    我不认为我的 gae python 应用程序具有灵活的环境 因为我多年前创建了它 现在我想尝试创建一个具有不同于 python 的运行时的模块 并使 python 应用程序与新的运行时 自定义运行时或其他运行时一起运行 也许混合 PHP 和
  • 将 IQueryable 类型转换为 Linq to Entities 中的接口

    我的泛型类中有以下方法 This is the class declaration public abstract class BaseService
  • Google Cloud 端点和 JWT

    我有一个基于 Google Cloud Endpoints 的 API 我想使用 JWT Json Web Tokens 进行授权 我可以为每个包含令牌的请求设置授权标头 并且它可以正常工作 我知道 Endpoints 使用此标头进行 Oa
  • MaterialComponents.TextInputLayout.OutlinedBox 它无法正常工作 boxBackgroundColor

    我用的是材料 我将使用 TextInputLayout 的颜色作为背景 但类似于下面的颜色 提示背景未更改 我使用了样式并想进行更改 但没有成功 在布局本身中 我尝试再次应用更改 如何解决这个问题 NOTE 的背景标签用户名图片中没有透明的
  • 访问故事板内的视图

    如何在代码中访问从对象浏览器拖到情节提要中的另一个视图中的视图 例如 我创建了一个 UIView 并将其分配给 ViewController 类 然后我将地图视图拖到该视图中 现在我需要开始在代码中操作该地图视图 我如何访问它 我尝试过 s
  • UWP 模板 10 和服务依赖注入 (MVVM),而非 WPF

    我花了两个多星期的时间搜索 google bing stackoverflow 和 msdn 文档 试图找出如何为我正在开发的移动应用程序进行正确的依赖项注入 需要明确的是 我每天都在网络应用程序中进行 DI 我不需要关于什么 谁以及为什么
  • 使用安全模式=“TransportWithMessageCredential”测试WCF服务wsHttpBinding

    我尝试使用soapUI进行测试 但是在启用安全性时它不支持wsHttpBinding 使用 wsHttpBinding 时 soapUI 确实可以工作 但安全性为零 我们还尝试了 WCF Storm 它确实有效 我们可以加载我们的客户端配置
  • 跨节点项目共享通用打字稿代码

    假设我有以下项目结构 webapps ProjectA SomeClass ts 包 json ProjectB SomeClass ts 包 json Common LoggingClass ts 包 json 公共 LoggingCla
  • 如何在 Visual Studio (2010) 中突出显示 C(而不是 C++)语法?

    我正在和朋友一起用 C 语言做一些小练习 出于习惯 我一直使用较新语言的关键字 例如 bool new 我花了一段时间才意识到这是问题所在 因为 VS 不断将它们突出显示为关键字 即使它们不在 C 中 我确保所有文件都是 c 并将项目属性设
  • C# 中的队列和等待句柄

    我的应用程序中使用以下代码已有多年 但从未发现其中出现问题 while PendingOrders Count gt 0 WaitHandle WaitAny CommandEventArr 1 lock PendingOrders if