【问题标题】:Examples of thread safe classes in the .NET Framework?.NET Framework 中线程安全类的示例?
【发布时间】:2011-05-13 03:14:52
【问题描述】:

我目前正在编写应该是线程安全的代码。许多异步调用和事件以及通常需要大量工作来保持同步和线程安全的东西。

.NET 框架中是否有任何类可以处理这类事情,我可以查看(反编译)以了解事情应该如何完成?越复杂越好……

【问题讨论】:

  • 只要有多个线程可以同时访问共享资源,就使用锁。

标签: c# .net multithreading events locking


【解决方案1】:

.NET 4.0 Thread-Safe Collections

尽管针对 Windows 而不仅仅是 .NET,但 Joe Duffy 的书值得注意:Concurrent Programming on Windows

【讨论】:

  • 感谢您的回答,但是这里的线程安全性很弱。
  • @NoPyGod:呃,说什么?没有线程安全等级。代码要么是线程安全的,要么不是。您的问题明确要求“.NET Framework 中的线程安全类示例?”
  • @Mitch "包装器的工作原理是在每次添加或删除操作时锁定整个集合。因此,尝试访问集合的每个线程都必须等待轮到它获取一个锁。这是不可扩展,并且可能导致大型集合的性能显着下降。此外,该设计并未完全保护免受竞争条件的影响。“......使用单个锁对单个对象进行排队访问是一个非常基本的概念。寻找更复杂的例子。
  • @NoPyGod - 如果您的线程安全技能比 Microsoft 工程师好得多,请不要询问他们的工作示例。
  • @NoPyGod:你完全错过了文章的真正内容!它首先讨论了从 .NET 1.0 同步集合的 old 方法(这是您在评论中引用的部分)。然后继续描述 .NET 4.0 中引入的新并发集合,它们是无锁的、高度可扩展的,而且我向您保证,非常先进。
【解决方案2】:

MSDN 有一些关于 .NET 异步编程的好信息。查看Asynchronous Programming Design Patterns

还可以查看 System.Threading 中的 MonitorMutex

【讨论】:

  • 我对这两个类都非常熟悉。只是寻找它们在 .NET 框架中的使用示例。
  • @NoPyGod:启动 Reflector 或类似的,并搜索 .net 框架中的哪些类使用 Monitor 和 Mutex。
【解决方案3】:

有几种方法可以保持原子性。有一些类支持隔离,这样可以保证代码按特定顺序执行。您可以使用关键字 volatile 来确保变量访问是原子的(每次使用时从内存读取)并且您没有幻读。这些只是一些工具;我建议使用“atomic C#, F#..”的简单 Google

【讨论】:

  • 非常熟悉锁、互斥锁、信号量等。只是寻找这些东西在 .NET 框架中使用的有力示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多