【问题标题】:ThreadStatic Attribute or ConcurrentDictionary? Which is better for thread-safe?ThreadStatic 属性还是 ConcurrentDictionary?哪个更适合线程安全?
【发布时间】:2014-03-21 04:53:47
【问题描述】:

我是 ThreadStatic 的新手,之前使用过 ConcurrentDictionary。那么哪个是更好的选择呢?或者这取决于场景。如果依赖:

  1. 我应该使用标有 IList 属性的 [ThreadStatic] 什么场景?
  2. 我应该使用什么场景 *ConcurrentDictionary *

【问题讨论】:

  • 这取决于您使用它们的目的。从表面上看,这两件事没有任何共同之处。这就像问你应该吃橙子还是骑自行车一样。告诉我们您想做什么,我们可以帮助您决定如何去做。
  • @JimMischel:哦,谢谢,我没认出来。我想要的是多线程共享相同的资源(例如对象列表),它应该是安全的。

标签: c# multithreading concurrency thread-safety ilist


【解决方案1】:

ThreadStatic 只能在当前线程中使用,不能从其他线程访问实例。每个线程都有自己的 ThreadStatic 实例。

ThreadStatic 存储在 Thread Local Storage 中,每个 Thread 都有本地存储,.NET 做了一些额外的逻辑来完成这项工作。

  1. 当您希望每个线程访问一个实例时,您应该使用 ThreadStatic。在客户端服务器通信的情况下,服务器每个套接字有一个线程,它需要将有关客户端套接字的信息和其他一些信息存储在其他库访问的静态变量中。 ThreadStatic 会导致代码复杂,因此应避免或谨慎编码。

  2. 当您想在多个线程之间访问共享资源时,您可以使用 ConcurrentDictionary。

【讨论】:

  • ThreadStatic - “当你想每个线程访问一个实例时”。如果每个线程有一个实例,为什么我需要使用 ThreadStatic?实际上,像往常一样,如果我只需要一个实例,我不会使用 ThreadStatic。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多